使用pandas.read_csv读取csv文件并指定索引时产生NaN条目

5 投票
1 回答
46475 浏览
提问于 2025-04-17 23:56

我的 .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 的数据框。

撰写回答