【问题标题】:Pandas ValueError: 'Date' is not in listPandas ValueError:“日期”不在列表中
【发布时间】:2017-12-29 09:47:32
【问题描述】:

我正在阅读 Pandas “烹饪书”第 1 章,bikes.csv 示例。当我尝试将 parse_dates 更改为 ['Date'], dayfirst=True, index_col 时,日期如下: (行:在 [6] 中,在烹饪书的第 1 章中)

fixed_df = pd.read_csv('../data/bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')

我明白了: ValueError:“日期”不在列表中。 在我写到这里之前,我尝试了以下解决方案:

第一个: utf-8 bom problem

据我了解,utf-8 中的 bom 会产生一些问题并导致此错误。此外,“日期”行在阅读时被熊猫接受为tuple? (很抱歉,如果我用错误的词写了它,但这是我记得的,我不是 Python 专业人士)我尝试使用 suggestion 转换编码: “utf-8-sig”编解码器给出一个没有 BOM 的 unicode 字符串:

fp = open("file.txt")
s = fp.read()
u = s.decode("utf-8-sig")

即使我没有收到任何错误,它也不起作用。

第二次: Vim 我尝试这些来改变编码

iconv -f UTF-8 -t ISO-8859-1 infile.txt > outfile.txt

还有这个,

vim +"set nobomb | set fenc=utf8 | x" filename.txt

它们都不起作用。

3rd:当我用vim打开文件时,我尝试更改文件编码。

set fileencoding=utf-8-sig(以及其他可能的编码,如 ANSI、ASCII 等) 我收到此错误

E213: 无法转换(加 ! 写不转换)

请你帮帮我,我想念哪里?非常感谢提前

【问题讨论】:

  • parse_dates=True 不起作用?
  • 试试pd.read_csv('../data/bikes.csv', sep=';', encoding='utf-8-sig', parse_dates=['Date'], dayfirst=True, index_col='Date')pd.read_csv('../data/bikes.csv', sep=';', encoding='utf-16', parse_dates=['Date'], dayfirst=True, index_col='Date')
  • pd.read_csv('https://raw.githubusercontent.com/jvns/pandas-cookbook/master/data/bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date') 适用于 Python 3.5 pandas 0.20.3。
  • @COLDSPEED 是的,parse_dates=True 不起作用。
  • @MaxU 我先尝试,utf-8-sig 它抛出'ValueError:'Date'不在列表中'。并尝试你的第二个建议,utf-16 它给出了错误:'UnicodeError: UTF-16 stream does not start with BOM'

标签: python pandas vim encoding utf-8


【解决方案1】:

使用您提供的网址

url = 'http://donnees.ville.montreal.qc.ca/dataset/f170fecc-18db-44bc-b4fe-5b0b6d2c7297/resource/d54cec49-349e-47af-b152-7740056d7311/download/comptagevelo2012.csv'

df = pd.read_csv(url, sep=',', parse_dates={'datetime':[0, 1]}, index_col='datetime')

df.head()

给予

            Rachel / Papineau  Berri1  Maisonneuve_2  Maisonneuve_1  Brébeuf  \
datetime                                                                       
2012-01-01                 16      35             51             38      5.0   
2012-02-01                 43      83            153             68     11.0   
2012-03-01                 58     135            248            104      2.0   
2012-04-01                 61     144            318            116      2.0   
2012-05-01                 95     197            330            124      6.0   

我已更改 sepencoding 参数,因为该文件中的分隔符是逗号,编码是 utf-8read_csv 的默认值)。有一个未命名的时间列,您也可以使用它来包含在解析中。在这个例子中,我认为它们都为零,但这在其他情况下可能很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2021-09-29
    • 2021-04-11
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多