【问题标题】:Pandas - column not found in dataframePandas - 在数据框中找不到列
【发布时间】:2016-09-27 16:36:48
【问题描述】:

我正在读取一个 csv 文件,frmo 我获得了这些列:

encoding = "UTF-8-SIG"
csv_file = "my/path/to/file.csv"
fields_cols_mapping = {
    'brand_id': 'Brand',
    'custom_dashboard': 'Custom Dashboard LO',
    'custom_dashboard_isfeatured': 'Custom Dashboard LO - Is Featured',
    'description': 'LODescription',
    'is_active': 'TrainingIsActive',
    'lo_id': 'LOID',
    'lo_type_id': 'LOType',
    'timestamp': 'Timestamp',
    'title': 'LOTitle',
    'training_version_id': 'TrainingVersion'
}

dataframe = pd.read_csv(
        csv_file,
        encoding=encoding,
        sep='|',
        usecols=[unicode(v) for v in fields_cols_mapping.values()],
        dtype={ k: object for k in fields_cols_mapping.keys() },
    )

但是,在使用 ipdb 检查时,我发现使用 read_csv 调用的解析器不会转换列名 Custom Dashboard LO – Is Featured

# debug
> /../../venvs/myvenv/lib/python2.7/site-packages/pandas/io/parsers.py(1140)__init__()
1138             col_indices = []
1139             for u in self.usecols:
-> 1140                 if isinstance(u, string_types):
1141                     col_indices.append(self.names.index(u))
1142                 else:

ipdb> self
<pandas.io.parsers.CParserWrapper object at 0x10b134710>
ipdb> self.names
[u'LOType', u'LOID', u'LOTitle', u'TrainingVersion',    u'LODescription', u'TrainingIsActive', u'Custom Dashboard LO', u'Brand',     u'Custom Dashboard LO \u2013 Is Featured', u'Timestamp']

有人对我应该做什么有任何建议吗?

【问题讨论】:

    标签: python pandas utf-8


    【解决方案1】:

    您的问题是数据框中的破折号与字典中的破折号不同。数据框中的一个是破折号(\u2013),而字典中的一个是连字符(\u2010)。它们看起来相似,但它们不是同一个字符,因此字符串不匹配。

    【讨论】:

      【解决方案2】:

      谢谢。我更改了 dict 值,但是:

      In [130]: dataframe = pd.read_csv(
         ...:             lo_csv_path,
         ...:             encoding=encoding_l,
         ...:             sep='|',
         ...:             usecols=[unicode(v) for v in fields_cols_mapping.values()],
         ...:             dtype={ k: object for k in fields_cols_mapping.keys() },
         ...:             )
      ---------------------------------------------------------------------------
      UnicodeDecodeError                        Traceback (most recent call      last)
      <ipython-input-130-670241506984> in <module>()
            3             encoding=encoding_l,
            4             sep='|',
      ----> 5             usecols=[unicode(v) for v in fields_cols_mapping.values()],
            6             dtype={ k: object for k in fields_cols_mapping.keys() },
            7         )
      
      UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 20: ordinal not in range(128)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        相关资源
        最近更新 更多