【发布时间】:2023-03-21 09:44:01
【问题描述】:
我对@987654321@ 和pandas 很陌生。感谢您提供任何指导、评论和建议!
这是我的问题:调用df.shape 或df.dtypes 后需要几分钟才能返回结果。 DataFrame 有 1,610,658 行和 5 列。三列存储为int64,一列存储为float64,一列存储为datetime64。
我使用以下代码在python 中练习加载和转换。 load和transform都有不错的性能,但是我在查看输出时遇到了这个问题。
更新 1:
将部分列设置为索引后,df.shape 时间从 80+s 下降到 1.7s,但df.dtypes 仍停留在 80+s
import pandas as pd
###############
# Load
###############
raw = pd.read_csv("data.zip", compression='zip')
###############
# Transform
###############
payment_method = {
"Cash": 1
"Card": 2
}
df = raw. \
assign(
# Encode site ids to int. Only two sites in this data
site = (raw.site == "A").astype(int),
# Encode payment types to int
payment =
[payment_method.get(k, 0) for k in raw.payment],
# Rescale values
amount = raw.amount / 1e6,
# Convert integer date key to datetime
sold_date= pd.to_datetime(
[str(dt) for dt in raw. sold_date],
format="%Y%m%d")
)
###############
# Check point
###############
df.shape # pain point I. Took minutes to return
# Out[9]: (1610658, 5)
df.dtypes # pain point II
# Out[10]:
# site int64
# acct_key int64
# sold_date datetime64[ns]
# amount float64
# payment int64
如果我将数据框转换为numpy.ndarray,我可以立即得到结果。我想我一定错过了什么。请给我一些指导。
非常感谢!
系统:OS X 10.12
Python:3.6.1
Numpy:1.12
熊猫:0.20.2
Jupyter 控制台:5.1.0
【问题讨论】:
-
如果只执行 print(df) 怎么样?会不会和一些懒惰的评价有关?调用 shape 属性后你会尝试 numpy 的东西吗?
-
@ayhan 谢谢你的回复。 1.
print(df)立即给我结果,如切片和其他数据操作。根据我有限的观察,它只会在提取元数据时变慢,例如IPython中的属性和方法列表的<tab>。 2.我对Python的懒惰评价了解不多,不好意思。 3. 在Numpy中非常好用 -
你安装了 Jedi 吗? (您可能没有直接安装它,但它可能是由 jupyter 或 ipython 提供的。)
-
@DSM 是的,
Jedi在我的列表中。我通过conda设置了我的环境。感谢您的回复 -
@RichardH 你有可以重现问题的样本数据吗?你终于找到解决办法了吗?
标签: python performance pandas dataframe