Python-替换dataframe中满足特定条件的所有值
我有一个数据框,其中包含使用逗号分隔符(例如150000)表示为字符串的数字。还有一些值用“-”表示 我试图将所有表示为字符串的数字转换为浮点数。“一”字将保持原样 我当前的代码使用for循环来迭代每个列和行,以查看每个单元格是否有逗号。如果是,则删除逗号,然后将其转换为数字 这在大多数情况下都可以正常工作,除了一些数据帧具有重复的列名,而这正是它崩溃的时候 是否有更有效的方法进行此更新(即不使用循环)并在存在重复列名时避免问题 当前代码:Python-替换dataframe中满足特定条件的所有值,python,pandas,Python,Pandas,我有一个数据框,其中包含使用逗号分隔符(例如150000)表示为字符串的数字。还有一些值用“-”表示 我试图将所有表示为字符串的数字转换为浮点数。“一”字将保持原样 我当前的代码使用for循环来迭代每个列和行,以查看每个单元格是否有逗号。如果是,则删除逗号,然后将其转换为数字 这在大多数情况下都可以正常工作,除了一些数据帧具有重复的列名,而这正是它崩溃的时候 是否有更有效的方法进行此更新(即不使用循环)并在存在重复列名时避免问题 当前代码: for col in statement_df
for col in statement_df.columns:
row = 0
while row < len(statement_df.index):
row_name = statement_df.index[row]
if statement_df[col][row] == "-":
#do nothing
print(statement_df[col][row])
elif statement_df[col][row].find(",") >= 0:
#statement_df.loc[col][row] = float(statement_df[col][row].replace(",",""))
x = float(statement_df[col][row].replace(",",""))
statement_df.at[row_name, col] = x
print(statement_df[col][row])
else:
x = float(statement_df[col][row])
statement_df.at[row_name, col] = x
print(statement_df[col][row])
row = row + 1
语句中的列的:
行=0
而行=0:
#语句[col][row]=float(语句[col][row]。替换(“,”,”)
x=浮点(语句[col][row]。替换(“,”,”)
在[行名称,列]=x处的语句
打印(报表[列][行])
其他:
x=浮动(语句[列][行])
在[行名称,列]=x处的语句
打印(报表[列][行])
行=行+1
您可以使用iloc
功能进行以下操作-
for idx in range(len(df.columns)):
df.iloc[:, idx] = df.iloc[:, idx].apply(your_function)
您的_函数
中的代码应该能够处理来自一行的输入。例如—
def your_function(x):
if x == ',': return 0
return float(x)
在数据帧本身上使用str.replace(',','')
对于下面这样的数据帧
Name Count
Josh 12,33
Eric 24,57
Dany 9,678
像这样申请
df['Count']=df['Count'].str.replace(',','')
df
它将为您提供以下输出
Name Count
0 Josh 1233
1 Eric 2457
2 Dany 9678
谢谢,这很有效-至少它删除了所有出现的“,”。但是,一旦删除了“,”之后,“number”在技术上仍然是一个字符串。我如何转换为浮点数,但要记住,我仍然有“-”的出现,我想保持不变?