使用pandas.read_csv读取csv文件并指定索引时产生NaN条目
我的 .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 个回答
12
其实不需要把 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()
时,如果输入是一个数据框,它会进行一个 reindex
操作。因为 datetimeIdx
中的标签在原始的 T1
索引里找不到,所以你得到的就是一个全是 NaN 的数据框。