我从一个金融API中提取了一些股票数据,并创建了一个DataFrame,其中包括 "日期","数据1","数据2","数据3"。我从金融API中提取了一些股票数据,并创建了一个DataFrame,列是 "date"、"data1"、"data2"、"data3"。 然后,我将DataFrame转换为以'date'列为索引的CSV。
df.to_csv('data.csv', index_label='date')
在第二个脚本中,我读取了那个CSV,并试图在两个日期之间切开产生的DataFrame。
df = pd.read_csv('data.csv', parse_dates=['date'] ,index_col='date')
df = df['2020-03-28':'2020-04-28']
当我试图这样做时,我得到了以下TypeError:
TypeError: cannot do slice indexing on <class 'pandas.core.indexes.numeric.Int64Index'> with these indexers [2020-03-28] of <class 'str'>
所以很明显,问题在于我试图使用str来切分一个日期时间对象。 但这里是令人困惑的部分 如果在第一步中,我将DataFrame保存为csv,并且不将 "date "设置为索引。
df.to_csv('data.csv')
在我的第二个脚本中,我不再得到TypeError:
df = pd.read_csv('data.csv', parse_dates=['date'] ,index_col='date')
df = df['2020-03-28':'2020-04-28']
现在它工作得很好。 唯一的问题是我有默认的Pandas索引列要处理。
为什么当我在CSV中设置 "日期 "列为索引时,会出现TypeError,而当我在CSV中不设置任何索引时,却没有出现TypeError?
看来,在你的 "第一个 "实例中的 df, 日期 栏目是一个普通 列(不是索引),而这个DataFrame有一个默认的索引--连续的整数(它的名字不重要)。
在这种情况下,运行 df.to_csv('data.csv', index_label='date')
输出文件所包含的原因。
date,date,data1,data2,data3
0,2020-03-27,10.5,12.3,13.2
1,2020-03-28,10.6,12.9,14.7
即:
那么如果你读它运行df = pd.read_csv('data.csv', parse_dates=['date'], index_col='date')
那么,
现在当你运行 df['2020-03-28':'2020-04-28']
,您可以尝试寻找带有 指数 在给定的范围内。但索引列是 Int64Index类型(在你的安装中检查),因此只抛出了上述异常。
当你运行 df.to_csv('data.csv')
.现在这个文件包含::
,date,data1,data2,data3
0,2020-03-27,10.5,12.3,13.2
1,2020-03-28,10.6,12.9,14.7
即:
现在当你读取它时,结果是。
而现在,当你运行 df['2020-03-28':'2020-04-28']
一切都OK了。
未来要学习的东西:跑步 df.to_csv('data.csv', index_label='date')
不将此列设置为索引。它 只是 拯救了 当前 索引列下的名字。明目张胆 是否有其他列有相同的名称。
结果是,2个列可以有相同的名称。