【发布时间】: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”。字符串?