簡體   English   中英

Python Pandas - 替換 dataframe 中滿足特定條件的所有值

[英]Python Pandas - replace all values in dataframe where the value meets certain condition

我有一個 dataframe 包含表示為使用逗號分隔符的字符串的數字(例如 150,000)。 還有一些值用“-”表示。

我正在嘗試將所有表示為字符串的數字轉換為浮點數。 “-”將保持原樣。

我當前的代碼使用 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

在 dataframe 本身上使用 str.replace str.replace(',', '')

對於 dataframe 如下所示

Name  Count
Josh  12,33
Eric  24,57
Dany  9,678

像這樣申請

df['Count'] = df['Count'].str.replace(',', '')
df

它會給你以下 output

   Name Count
0  Josh  1233
1  Eric  2457
2  Dany  9678

您可以為此使用iloc功能 -

for idx in range(len(df.columns)):
    df.iloc[:, idx] = df.iloc[:, idx].apply(your_function)

your_function中的代碼應該能夠處理來自一行的輸入。 例如 -

def your_function(x):
    if x == ',': return 0
    return float(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM