python - Pandas - 在数据框中找不到列

标签 python pandas utf-8

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

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 Featuresed:

# 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']

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

最佳答案

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

关于python - Pandas - 在数据框中找不到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729995/

相关文章:

python - pandas-两列的值是列表,需要生成一个新的 df 来显示它们之间的所有值组合

python - pylint 可以检查所有文档顶部的静态注释/版权声明吗?

python - form.is_valid() 为 false 时如何访问数据

java - 无法在我的 servlet 中解码西里尔字符串

mysql - MySQL UTF8 排序规则是否适合日文和韩文字符?

windows - 如何使用 UTF-8 编码编织 2html?

python - Pandas 分组 - 值占分组总数的百分比不起作用

python - 如何使用 pandas 旋转分组对象

python - Pandas:按数百个分组 DataFrame

python - Pandas 根据两个条件设置列值