Python 熊猫:清除数据帧并将其转换为数字
我有一个包含字符串的数据框,从松散的csv读取:Python 熊猫:清除数据帧并将其转换为数字,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个包含字符串的数据框,从松散的csv读取: id Total B C ... 0 56 974 20 739 34 482 1 29 479 10 253 16 704 2 86 961 29 837
id Total B C ...
0 56 974 20 739 34 482
1 29 479 10 253 16 704
2 86 961 29 837 43 593
3 52 687 22 921 28 299
4 23 794 7 646 15 600
我要做的是:将帧中的每个单元格转换为一个数字。它应该忽略空白,但将NaN放在单元格中包含非常奇怪的内容的位置。
我可能知道如何使用性能极差的手动循环和替换值来实现这一点,但我想知道是否有一个简洁明了的方法来实现这一点。您可以使用regex separator\s{2,}-2或更多的空格和参数:
然后,如有必要,使用参数errors='polite'应用函数,将非数值替换为NaN:
import pandas as pd
from pandas.compat import StringIO
temp=u"""id Total B C
0 56 974 20 739 34 482
1 29 479 10 253 16 704
2 86 961 29 837 43 593
3 52 687 22 921 28 299
4 23 794 7 646 15 600 """
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="\s{2,}", engine='python', thousands=' ')
print (df)
id Total B C
0 0 56974 20739 34482
1 1 29479 10253 16704
2 2 86961 29837 43593
3 3 52687 22921 28299
4 4 23794 7646 15600
print (df.dtypes)
id int64
Total int64
B int64
C int64
dtype: object
df = df.apply(pd.to_numeric, errors='coerce')