【发布时间】:2019-09-28 11:22:46
【问题描述】:
好的,所以我对下面的文章很迷茫。我有 .csv 文件,我想用 Pandas 将其解析为数据帧。 .csv 中的某些列应该包含日期,所以我想用pd.read_csv 中的parse_dates 标志来攻击它们。因此,我采用以下方式进行此操作,首先定义我的“模式数据框”,指示我期望在文件中为其各自列的数据类型:
import pandas as pd
import numpy as np
df_schema = pd.DataFrame(
index=pd.RangeIndex(start=0, stop=5, step=1),
data={'dtype_expected':[
np.dtype('datetime64[ns]'),
np.dtype('datetime64[ns]'),
np.dtype('datetime64[ns]'),
np.dtype('float64'),
np.dtype('datetime64[ns]')
]
}
)
然后“计算”我想解析为日期的列索引:
parse_dates = df_schema[
df_schema['dtype_expected'] == np.dtype('datetime64[ns]')
].index.values
所以这导致type(parse_dates) 成为numpy.ndarray(在上面的例子中是array([0, 1, 2, 4], dtype=int64)),因为我知道pd.read_csv 会期望parse_dates 的整数列表,所以我用@987654330 包装它@构造函数如下:
df = pd.read_csv(
file_path,
error_bad_lines=True,
sep = ';',
decimal=',',
parse_dates=list(parse_dates)
)
但他的崩溃是KeyError: 0。
(!!!) 有趣的是,如果我输入代码parse_dates = [0,1,2,4](即,我不计算它,只是简单地输入值),那么上面的 sn-p 就可以了像一个魅力!对这个很困惑。此外,这表明问题与数据无关。
【问题讨论】:
-
我之前遇到过这个错误,但没有找到完全令人满意的解决方案。我发现有一条记录不会强制约会。我解决它的方法是将 csv 作为常规文件导入,然后使用
df['my_date'] = pd.to_datetime(df['my_date'],errors = 'coerce')然后手动查看返回 N/A 的日期。幸运的是,在我的数据集中填充这些内容很容易。
标签: python arrays pandas list csv