Python 2.7 优化到整数-整数的转换
我有一个80000行的数据帧。一列“prod_prom”包含空值或数字的字符串表示,即包括“,”。我需要把它们转换成整数。到目前为止,我一直在这样做:Python 2.7 优化到整数-整数的转换,python-2.7,pandas,Python 2.7,Pandas,我有一个80000行的数据帧。一列“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 != ',']))
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 != ',']))
但是速度非常慢。在列表理解中这样做会更快吗,还是使用apply函数?这种操作的最佳实践是什么
谢谢如果我理解正确,您有如下数据:
data = """
A,B
100,"5,000"
200,"10,000"
300,"100,000"
400,
500,"2,000"
"""
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
如果是这种情况,最简单的方法可能是使用read\u csv
中的数千
选项(由于缺少值,类型将是float
而不是int
):
如果不可能,您可以执行以下操作:
data = """
A,B
100,"5,000"
200,"10,000"
300,"100,000"
400,
500,"2,000"
"""
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
整数。导入数千个整数效果很好,我担心(可能没有什么好的理由)它可能会把我的其他列弄得一团糟(因为我没有花时间确认其他字符串列中是否存在','值。在这种情况下,第二种解决方案对我来说似乎更好。我可能可以将该技术与某种列表理解结合起来,以获得ints和NA值。谢谢您指定使用“千”选项导入哪些列?应该处理NaN通过pandas
自动执行。您根本不必担心它们。即使您在列表中将单个元素更改为int
,因为您在某些元素中有NaN值,pandas也会在我使用1000个时自动将列的数据类型更改为float
,但它无法转换'4453.8'0.这是典型的吗?是的,因为逗号后面有空格。如果没有空格,应该可以转换。