Python-替换dataframe中满足特定条件的所有值

Python-替换dataframe中满足特定条件的所有值,python,pandas,Python,Pandas,我有一个数据框,其中包含使用逗号分隔符(例如150000)表示为字符串的数字。还有一些值用“-”表示 我试图将所有表示为字符串的数字转换为浮点数。“一”字将保持原样 我当前的代码使用for循环来迭代每个列和行,以查看每个单元格是否有逗号。如果是,则删除逗号,然后将其转换为数字 这在大多数情况下都可以正常工作,除了一些数据帧具有重复的列名,而这正是它崩溃的时候 是否有更有效的方法进行此更新(即不使用循环)并在存在重复列名时避免问题 当前代码: for col in statement_df

我有一个数据框,其中包含使用逗号分隔符(例如150000)表示为字符串的数字。还有一些值用“-”表示

我试图将所有表示为字符串的数字转换为浮点数。“一”字将保持原样

我当前的代码使用for循环来迭代每个列和行,以查看每个单元格是否有逗号。如果是,则删除逗号,然后将其转换为数字

这在大多数情况下都可以正常工作,除了一些数据帧具有重复的列名,而这正是它崩溃的时候

是否有更有效的方法进行此更新(即不使用循环)并在存在重复列名时避免问题

当前代码:

    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”在技术上仍然是一个字符串。我如何转换为浮点数,但要记住,我仍然有“-”的出现,我想保持不变?