【问题标题】:Pandas data pull - messy strings to float熊猫数据拉 - 凌乱的字符串浮动
【发布时间】:2017-04-13 14:15:01
【问题描述】:

我是 Pandas 的新手,我才刚刚开始了解该软件包的多功能性。在处理一个小型练习 csv 文件时,我将以下数据拉入:

Rank    Corporation Sector  Headquarters    Revenue (thousand PLN)  Profit (thousand PLN)   Employees


1.ÿ PKN Orlen SA    oil and gas P?ock   79 037 121  2 396 447   4,445

2.ÿ Lotos Group SA  oil and gas Gda?sk  29 258 539  584 878 5,168

3.ÿ PGE SA  energy  Warsaw  28 111 354  6 165 394   44,317

4.ÿ Jer¢nimo Martins    retail  Kostrzyn    25 285 407  N/A 36,419

5.ÿ PGNiG SA    oil and gas Warsaw  23 003 534  1 711 787   33,071

6.ÿ Tauron Group SA energy  Katowice    20 755 222  1 565 936   26,710

7.ÿ KGHM Polska Mied? SA    mining  Lubin   20 097 392  13 653 597  18,578

8.ÿ Metro Group Poland  retail  Warsaw  17 200 000  N/A 22,556

9.ÿ Fiat Auto Poland SA automotive  Bielsko-Bia?a   16 513 651  83 919  5,303

10.ÿ    Orange Polska   telecommunications  Warsaw  14 922 000  1 785 000   23,805

我有两个严重的问题,我似乎无法找到解决方案:

1) “Ravenue”和“Profit”列中的数据被作为字符串拉入,因为有趣的格式与数千之间的空格,我似乎无法弄清楚如何让 Pandas 转换为浮点值。

2) “Rank”列下的数据被拉入为“1.?”、“2.?”等等那里发生了什么?同样,当我尝试使用更合适的内容(例如“1.”、“2”)重写此数据时。等等,DataFrame 就是不让步。

想法?建议?我也愿意直接抨击,因为我的问题可能非常明显和愚蠢 - 请原谅我缺乏经验:)

【问题讨论】:

  • “千位之间有空格的有趣格式”实际上是波兰语(也是俄语)分隔千位的方式。不幸的是,波兰数字语言环境似乎不受支持,但这个问题的第一个答案stackoverflow.com/questions/42937460/… 提供了一种解决方法。至于第二个问题,我不确定 'ÿ's 来自哪里(它们实际上代表文件结尾,EOF),但df['Rank']=df['Rank'].str.strip('ÿ') 应该照顾它们。
  • 1.您会发现在转换或使用数据之前,您经常需要“清理”数据。试试df['Revenue'] = df['Revenue'].apply(lambda value: float(value.replace(' ',''))) 和 2,你能分享你原始 CSV 中的示例行吗?
  • @Quitty 除非绝对必要,否则避免调用apply,因为它会使您的代码变慢几个数量级。 df['Revenue'] = df['Revenue'].str.replace(' ','').astype(float) 效率更高。
  • 感谢您到目前为止的回答,调用 df['Rank']=df['Rank'].str.strip('ÿ') 不会改变任何东西,数字仍然打印为“1.?”。有什么办法我可以用正确的“1”来重写它。 - “10”。字符串?

标签: python csv pandas


【解决方案1】:

我会使用converters 参数。

将此传递给您的pd.read_csv 电话

def space_float(x):
    return float(x.replace(' ', ''))

converters = {
    'Revenue (thousand PLN)': space_float,
    'Profit (thousand PLN)': space_float,
    'Rank': str.strip
}

pd.read_csv(... converters=converters ...)

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2017-10-28
    • 2022-01-20
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多