【问题标题】:Reading a csv-file with pandas.read_csv and an index creates NaN entries使用 pandas.read_csv 和索引读取 csv 文件会创建 NaN 条目
【发布时间】:2014-05-04 12:39:02
【问题描述】:

我的 .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)

【问题讨论】:

    标签: python pandas ipython-notebook


    【解决方案1】:

    没有必要将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 的数据框。

    【讨论】:

    • 这个答案可能与我的另一个问题有关吗? stackoverflow.com/questions/22655667/… 是否可以将 index-col 作为副本保留在数据框中?
    • 我的第一个建议(直接设置索引)会将列保留在数据框中
    • @user2366975 看到左边的灰色复选标记了吗?您可能会考虑点击它。
    猜你喜欢
    • 2018-10-12
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多