【问题标题】:Cannot index date in Pandas Data Frame from read_csv无法从 read_csv 索引 Pandas 数据框中的日期
【发布时间】:2014-01-30 17:36:14
【问题描述】:

我今天遇到了一个我无法解决的问题。 我使用

读取了一个csv文件
mydata = pd.read_csv(file_name, header=0, sep=",", index_col=[0], parse_dates=True)

CSV 看起来像:

2009-12-10,5,6,7,8,9  
2009-12-11,7,6,6,7,9

我没有得到索引数据框,而是得到以下输出

print mydata

Empty DataFrame
Columns: []
Index: [2009-12-10,5,6,7,8,9 2009-12-11,7,6,6,7,9]

请帮忙!!我已经尝试了 2 个小时了!

非常感谢

【问题讨论】:

  • 你确定是 csv 吗?看起来有。而不是换行符,也许尝试 lineterminator='.'
  • 你能提供repr(open(file_name).read()[:50])的输出吗?

标签: python parsing csv pandas


【解决方案1】:

我认为您的代码有效。这是我看到的:

数据:

import pandas as pd

data = """2009-12-10,5,6,7,8,9
2009-12-11,7,6,6,7,9"""

从 csv 读取数据。

ts = pd.read_csv(pd.io.parsers.StringIO(data),
    names=['timepoint', 'a','b','c','d','e'],
    parse_dates=True,
    index_col=0)

看起来像这样

In [59]: ts
Out[59]:
            a  b  c  d  e
timepoint
2009-12-10  5  6  7  8  9
2009-12-11  7  6  6  7  9

而且索引是一个时间序列

In [60]: ts.index
Out[60]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2009-12-10 00:00:00, 2009-12-11 00:00:00]
Length: 2, Freq: None, Timezone: None

如果您得到不同的结果,您可以尝试一下并发布更新吗?

更新: 回应@prre72 对 csv 文件中列标题的评论:

如果 csv 有 5 个列标题且索引列未标记,您可以这样做:

In [17]: 
data = """"a","b","c","d","e"
2009-12-10,5,6,7,8,9
2009-12-11,7,6,6,7,9"""

ts = pd.read_csv(pd.io.parsers.StringIO(data),
    parse_dates=True,
    index_col=0)

In [18]: ts
Out[18]:
            a  b  c  d  e
2009-12-10  5  6  7  8  9
2009-12-11  7  6  6  7  9

In [19]: ts.index
Out[19]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2009-12-10 00:00:00, 2009-12-11 00:00:00]
Length: 2, Freq: None, Timezone: None

【讨论】:

  • 我注意到了一个不同之处:您的数据没有标题,而我的 csv 中的标题带有引用名称“”。我应该在阅读时删除标题然后将它们添加回来吗?
  • 有趣。 csv 的第一行是否有 5 或 6 个标题?我的意思是,索引列是否有列标题?还是该文件只有 5 个列标题且索引列未标记?
【解决方案2】:

您需要使用parse_dates=[0] 来指定要解析的日期列。您不必指定header=0。请改用header=None,这不会强制您指定标题。试试这个:

mydata = pd.read_csv(file_name, header=None, sep=",", index_col=[0], 
    parse_dates=[0])
print mydata
            1  2  3  4  5
0                        
2009-12-10  5  6  7  8  9
2009-12-11  7  6  6  7  9

如果你想指定列名,就用这个:

mydata.columns = list("abcde")  # list of column names

【讨论】:

    【解决方案3】:
    import pandas as pd
    raw_dt = pd.read_csv("fileName.csv", import_dates = True, index_col = 0)
    raw_dt
    

    现在,当您执行此代码时,index_col = 0 会将文件中的第一列视为索引列,import_dates = True 会将文件中包含日期的列解析为日期类型。

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2021-08-14
      • 1970-01-01
      • 2021-06-12
      • 2016-04-26
      • 2019-03-16
      相关资源
      最近更新 更多