![](/img/trans.png)
[英]Is there a more efficient way than this way of if statements in python?
[英]Is there more efficient way than this if statement for large data in python
所以我正在处理一个有 130 万行的大型数据文件。 我想要做的很简单,我想在某些条件下更改某些列中的值。
for i in range(0,len(data2)): #where len(data2) is about 1.3 million
if data2.loc[i,'PPA']==0:
data1.loc[i,'LDU']=0 #(data1 and data2 have same amount of rows)
我还需要格式化其他一些列。 例如,我想将性别格式化为 0 或 1。
数据如下:
data['Gender']
Out[156]:
0 F
1 M
2 F
3 F
..
1290573 M
1290574 F
Name: Gender, Length: 1290575, dtype: object
#Format to 0 and 1
for i in range(0,len(data)):
if data.loc[i,'Gender']=='F':
data.loc[i,'Gender']=0;
else:
data.loc[i,'Gender']=1
顺便说一句,关于处理时间,我注意到了一些不寻常的事情......我将前 5000 行保存到一个新的 csv 文件中,当我在示例数据上测试我的代码时,它表现得很好而且很快,就像在 10 秒内一样。 但是当我尝试在我的真实数据上运行它时,让它去做
for i in range(0,10000) #instead of the full length of data
大约需要 9 分钟。
上次我在我的完整数据上格式化另一个这样的列(分配 0 和 1)在 python 中需要 10 多个小时。 所以我只是想知道我的代码是否有问题? 还有其他更有效的方法可以让它更快地读取和重写吗? ...
任何帮助,将不胜感激! :)
我对 python 有点陌生,这是我的第一个问题帖子,谢谢大家的评论:)
您可以尝试np.where而不是循环
df=pd.DataFrame({'Gender':['M','F']})
df['Numeric_Gender'] = np.where(df.Gender=='M',1,0)
df
Gender Numeric_Gender
M 1
F 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.