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

use*_*975 3 python pandas ipython-notebook

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

这是有效的:

T1 = pd.DataFrame(pd.read_csv(loggerfile, header = 2)) #header contains column "1"
Run Code Online (Sandbox Code Playgroud)

但是一旦我在DataFrame构造函数中添加了一些东西read_csv,我的所有值都会突然出现NaN.为什么?怎么解决这个?

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

jor*_*ris 9

它没有必要包含read_csv一个DataFrame调用,因为它已经返回一个DataFrame.

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

T1 = pd.read_csv(loggerfile, header = 2)
T1.index = pd.DatetimeIndex(T1["1"])
Run Code Online (Sandbox Code Playgroud)

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

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

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

pd.read_csv(loggerfile, header=2, index_col=0, parse_dates=True)
Run Code Online (Sandbox Code Playgroud)

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