使用pandas.read_csv和索引读取csv文件会创建NaN条目

时间:2014-03-26 08:39:59

标签: python pandas ipython-notebook

我的.csv文件以逗号分隔,这是read_csv的标准设置。

这是有效的:

T1 = pd.DataFrame(pd.read_csv(loggerfile, header = 2)) #header contains column "1"

但是,除了DataFrame之外,只要我向read_csv的构造函数添加内容,我的所有值都会突然NaN。 为什么?怎么解决这个问题?

datetimeIdx = pd.to_datetime( T1["1"] )                #timestamp-column
T2 = pd.DataFrame(pd.read_csv(loggerfile, header = 2), index = datetimeIdx)

1 个答案:

答案 0 :(得分:9)

没有必要在read_csv调用中包含DataFrame,因为它已经返回DataFrame

如果要更改索引,可以使用set_index或直接设置索引:

T1 = pd.read_csv(loggerfile, header = 2)
T1.index = pd.DatetimeIndex(T1["1"])

如果要将数据框中的列保留为日期时间(而不是字符串):

T1 = pd.read_csv(loggerfile, header = 2)
T1["1"] = pd.DatetimeIndex(T1["1"])
T2 = T1.set_index("1", drop=False)

但更好的是,您可以直接在read_csv中执行此操作(假设列“1”是第一列):

pd.read_csv(loggerfile, header=2, index_col=0, parse_dates=True)

它返回带有NaNs的DataFrame的原因是因为使用DataFrame作为输入的DataFrame()调用将使用提供的输入执行reindex操作。由于datetimeIdx中的所有标签都不在T1的原始索引中,因此您将获得包含所有NaN的数据框。