我有一个80,000行的DataFrame。一列'prod_prom'包含空值或数字的字符串表示,即包括','。我需要将它们转换为整数。到目前为止,我一直这样做:
for row in DF.index:
if pd.notnull(DF.loc[row, 'prod_prom']):
DF.loc[row, 'prod_prom'] = int(''.join([char for char in DF.loc[row, 'prod_prom'] if char != ',']))
但它非常慢。在列表理解或应用函数中执行此操作会更快吗?这种操作的最佳实践是什么?
由于
答案 0 :(得分:1)
因此,如果我理解正确,您可以获得如下数据:
data = """
A,B
100,"5,000"
200,"10,000"
300,"100,000"
400,
500,"2,000"
"""
如果是这种情况,可能最简单的方法是使用thousands
中的read_csv
选项(由于缺失值,类型将为float
而不是int
):
df = pd.read_csv(StringIO(data),header=True,thousands=',')
A B
0 100 5000
1 200 10000
2 300 100000
3 400 NaN
4 500 2000
如果不可能,您可以执行以下操作:
print df
A B
0 100 5,000
1 200 10,000
2 300 100,000
3 400 NaN
4 500 2,000
df['B'] = df['B'].str.replace(r',','').astype(float)
print df
A B
0 100 5000
1 200 10000
2 300 100000
3 400 NaN
4 500 200
我将类型更改为float,因为pandas中没有NaN
个整数。