bandas ⚡ — pandas-compatible, faster + Universal Data Platform
أُعيدت تسمية المكتبة من
fandasإلىbandas— المستودع الرسمي الآن: https://github.com/salim-studio/bandas للترحيل:pip uninstall fandasثمpip install bandas-df، واستبدلimport fandasبـimport bandas.
bandas واجهة مطابقة لـ pandas (نفس الأسماء: DataFrame, Series, read_csv, concat, merge...) لكن أسرع، ومع منظومة متكاملة لقواعد البيانات، السلاسل الزمنية، تجهيز البيانات، تعلم الآلة، التعلم العميق، والتصوير — لتصبح خيار المطورين ومحللي البيانات وعلماء البيانات.
لماذا bandas؟
- تخزين عمودي خالص بـ NumPy بدون Overhead الـ BlockManager.
- Fast-paths رقمية:
sum/mean/min/maxعبر numpy مباشرة +bincountللـ groupby. - تسريع اختياري بـ Numba + قراءة CSV بـ PyArrow (أسرع 3-5x).
- SQL حقيقي:
df.sql("SELECT ...")بدون أي اعتماد إضافي (sqlite مدمج)، وموصل موحدDatabaseلـ sqlite / duckdb / postgres / mysql / sqlalchemy. - ML/DL جاهز:
train_test_split,KFold, مقاييس،StandardScaler,OneHotEncoder,to_torch,to_tensorflow,torch_dataset. - تحليل متقدم:
rolling/expanding/ewm,shift/diff/pct_change,pivot_table/melt/crosstab,str/dt accessors,LazyFrameللملفات الضخمة خارج الذاكرة.
تنصيب
تنصيب واحد يثبّت كل شيء (سرعة + قواعد بيانات + تعلم آلة + تصوير + إكسل):
pip install bandas-df
من المصدر:
pip install -e .
إضافي فقط للتعلم العميق (torch و tensorflow ضخمان — جيجابايتات — وغير متوفرين لكل نسخ Python):
pip install "bandas-df[dl]"
# أو من المصدر:
pip install -e ".[dl]"
1) أساسيات (أسرع من pandas)
import bandas as bd
df = bd.DataFrame({"a": [1,2,3], "b": [4.0,5.0,6.0]})
print(df.head())
print(df["a"].sum())
df2 = bd.read_csv("data.csv") # pyarrow إن وجد
g = df2.groupby("city")["price"].mean()
print(g.to_pandas())
pdf = df.to_pandas()
df3 = bd.from_pandas(pdf)
النتيجة على 500k صف: sum 1.9x, mean 1.5x, groupby 1.3x أسرع من pandas (انظر bench/bench.py).
2) قواعد البيانات / SQL
# SQL فوري بدون إعداد — يعمل دائماً (sqlite مدمج)
top = df.sql("SELECT city, AVG(price) AS m FROM df GROUP BY city ORDER BY m DESC")
# استعلام عبر عدة جداول
from bandas import sql_query
out = sql_query("SELECT * FROM a JOIN b ON a.k = b.k WHERE a.v > 10", {"a": a, "b": b})
# موصل موحد
from bandas.sql import Database
db = Database.sqlite("app.db") # أو :memory:
# db = Database.duckdb("data.duckdb") # يحتاج duckdb
# db = Database.postgres(user=..., password=..., host=..., db=...)
db.write(df, "sales")
print(db.query("SELECT COUNT(*) AS n FROM sales").to_pandas())
print(db.tables())
# pandas API
df.to_sql("sales", "sqlite:///app.db")
df2 = bd.read_sql("SELECT * FROM sales", "sqlite:///app.db")
3) سلاسل زمنية ونوافذ
s = df["price"]
s.rolling(7).mean() # متوسط متحرك
s.expanding().sum()
s.ewm(span=10).mean()
s.shift(1); s.diff(); s.pct_change(); s.cumsum()
df.rolling(30).mean(); df.ewm(alpha=0.3).mean()
bd.to_datetime(["2024-01-01", "2024-02-01"])
bd.date_range("2024-01-01", periods=12, freq="ME")
df["d"].dt.year / .month / .day / .dayofweek
4) نصوص وفئات وإعادة تشكيل
df["name"].str.lower().str.strip().str.contains("ali")
df["name"].str.replace("a", "@").str.split(" ", expand=True)
bd.get_dummies(df, columns=["city"])
bd.melt(df, id_vars=["city"])
bd.pivot_table(df, values="price", index="city", columns="year", aggfunc="mean")
bd.crosstab(df["city"], df["year"])
bd.cut(df["age"], bins=[0,18,60,100])
bd.qcut(df["price"], 4)
5) تجهيز البيانات (Preprocessing)
bd.SimpleImputer(strategy="mean").fit_transform(df)
bd.StandardScaler().fit_transform(df)
bd.MinMaxScaler().fit_transform(df)
bd.RobustScaler().fit_transform(df)
bd.LabelEncoder().fit_transform(df["city"])
bd.OneHotEncoder(columns=["city"]).fit_transform(df)
6) تعلم الآلة
X_train, X_test, y_train, y_test = bd.train_test_split(X, y, test_size=0.2, random_state=0)
list(bd.KFold(n_splits=5).split(X))
bd.accuracy_score(y, pred); bd.f1_score(y, pred)
bd.mean_squared_error(y, pred); bd.r2_score(y, pred)
# يعمل مباشرة مع sklearn
from sklearn.ensemble import RandomForestClassifier
X, y = bd.to_sklearn_Xy if False else (df.drop(columns=["target"]).to_numpy(), df["target"].to_numpy())
clf = RandomForestClassifier().fit(X_train_numpy, y_train_numpy)
7) التعلم العميق
X_t, y_t = df.to_torch(target="label") # torch.Tensor
loader = bd.dl.torch_dataset(df, target="label", batch_size=64)
ds = bd.dl.tf_dataset(df, target="label") # tf.data.Dataset
8) ملفات ضخمة (Lazy / out-of-core)
lf = bd.read_csv_chunked("big.csv", chunksize=100_000)
out = lf.filter(lambda d: d[d["x"] > 0]).select(["x","y"]).collect()
print(lf.sum("x"), lf.mean("x"), lf.count())
9) تصوير سريع
df.plot(kind="line", x="date", y="price")
df.plot(kind="bar", x="city", y="sales")
df["price"].hist(bins=50)
bd.viz.scatter(df, "a", "b"); bd.viz.heatmap_corr(df)
10) IO شامل
read_csv / read_parquet / read_json / read_excel / read_html / read_feather / read_orc / read_sql +
to_csv / to_parquet / to_json / to_excel / to_sql — كلها بنفس توقيع pandas.
هيكل المشروع
bandas/
__init__.py # الواجهة العامة + concat/merge/options/show_versions
series.py # Series + str/dt + rolling/ewm + cum*/shift/diff + ML helpers
dataframe.py # DataFrame + SQL + stats + reshape + viz + torch
groupby.py # GroupBy السريع + std/var/median/first/last/nunique
io.py # كل قارئات الملفات + chunked
sql.py # sql_query + read_sql/to_sql + Database الموحد
reshape.py # get_dummies/melt/pivot/crosstab/cut/qcut
window.py # Rolling/Expanding/EWM
strings.py # Series.str
datetimes.py # Series.dt + to_datetime/date_range
preprocessing.py # Imputer/Scaler/Encoder
ml.py # split/CV/metrics/sklearn bridge
dl.py # torch/tensorflow bridges
stats.py # corr/cov/outliers/summary
lazy.py # LazyFrame خارج الذاكرة
viz.py # رسوم سريعة
ops.py / utils.py
tests/test_basic.py + test_advanced.py (20 اختباراً)
اختبار و Benchmark
pytest -q
python bench/bench.py
python -c "import bandas; bandas.show_versions()"
Metadata
Release files for bandas-df 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| bandas_df-0.3.0.tar.gz | 42.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bandas_df-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 85.4 kB
Release files / bandas_df-0.3.0.tar.gz
| Download URL | bandas_df-0.3.0.tar.gz |
|---|---|
| Size | 42.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3778686d8706da26c188179e9e375ccd4ce8e052ba8a7409c450b4cc93bb2b87
|
|
BLAKE2b-256 checksum How to use checksums |
24f990827c6ba1fd4190d16bac0add32a780c35925972e25a8622eb0eec7b883
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / bandas_df-0.3.0-py3-none-any.whl
| Download URL | bandas_df-0.3.0-py3-none-any.whl |
|---|---|
| Size | 42.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6d7068f4f6a27b6d7d7368db5337a1dfb9738e492b527ee756e4b0e423201be4
|
|
BLAKE2b-256 checksum How to use checksums |
46193da93a7444b9f086a691223d05b300de21f354c6dc80f74c67205c6b98d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for bandas-df 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.