簡體   English   中英

如何遍歷數據框df中的選定列?

[英]How to iterate through selected columns in a dataframe, df?

我有一個 DataFrame,df,有 3775 行 × 8 列。

我的df.columns

Index(['FY', 'Month', 'Sales Area', 'BSP Agent', 'City Booking Office','General Sales Agent', 'Web Sales', 'Total'] of dtype='object'

對於列df[['BSP Agent', 'City Booking Office', 'General Sales Agent', 'Web Sales', 'Total']] ,我想執行以下操作:從列中刪除空格,然后將對象轉換為數字。

我使用了for loop但它非常令人困惑

for e in df_c:
    df_c[e] = df_c[e].replace(' ', '', regex=True)
    df_c[e] = pd.to_numeric(df_c[e], errors='coerce').fillna(0, downcast='infer')
    break

有沒有更好的方法來完成我的任務?

您可以通過執行以下操作來避免 for 循環:

c = ['FY', 'Month', 'Sales Area', 'BSP Agent', 'City Booking Office',
     'General Sales Agent', 'Web Sales', 'Total']

df[c] = df[c].apply(lambda x: x.str.replace(' ',  ''))
df[c]= df[c].apply(pd.to_numeric, errors = 'coerce').fillna(0, downcast='infer')

如果從文件創建 DataFrame 並且空間為數千個,最好的解決方案是在read_csv使用thousands參數,然后將正確的列轉換為數字:

df = pd.read_csv(file, thousands=' ')

使用DataFrame.replaceDataFrame.fillna通過列表和轉換為數值使用所有選定列DataFrame.apply

cols = ['BSP Agent', 'City Booking Office', 'General Sales Agent', 'Web Sales', 'Total']

df[cols] = (df[cols].replace(' ', '', regex=True)
                    .apply(lambda x: pd.to_numeric(x, errors = 'coerce'))
                    .fillna(0, downcast='infer'))

樣品

np.random.seed(123)

c =['FY', 'Month', 'Sales Area', 'BSP Agent', 
     'City Booking Office','General Sales Agent', 'Web Sales', 'Total']
cols = ['BSP Agent', 'City Booking Office', 'General Sales Agent', 'Web Sales', 'Total']

df = (pd.DataFrame(np.random.rand(5, len(cols)) * 10000, columns=cols)
         .astype(int)
         .applymap(lambda x: '{:,}'.format(x).replace(',', ' '))
         .reindex(c, axis=1, fill_value='data'))
print (df)
     FY Month Sales Area BSP Agent City Booking Office General Sales Agent  \
0  data  data       data     6 964               2 861               2 268   
1  data  data       data     4 231               9 807               6 848   
2  data  data       data     3 431               7 290               4 385   
3  data  data       data     7 379               1 824               1 754   
4  data  data       data     6 344               8 494               7 244   

  Web Sales  Total  
0     5 513  7 194  
1     4 809  3 921  
2       596  3 980  
3     5 315  5 318  
4     6 110  7 224  

cols = ['BSP Agent', 'City Booking Office', 'General Sales Agent', 'Web Sales', 'Total']

df[cols] = (df[cols].replace(' ', '', regex=True)
                    .apply(lambda x: pd.to_numeric(x, errors = 'coerce'))
                    .fillna(0, downcast='infer'))
print (df)
      FY Month Sales Area  BSP Agent  City Booking Office  General Sales Agent  \
0  data  data       data       6964                 2861                 2268   
1  data  data       data       4231                 9807                 6848   
2  data  data       data       3431                 7290                 4385   
3  data  data       data       7379                 1824                 1754   
4  data  data       data       6344                 8494                 7244   

   Web Sales  Total  
0       5513   7194  
1       4809   3921  
2        596   3980  
3       5315   5318  
4       6110   7224  

暫無
暫無

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

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