2017-04-18 94 views
6

我從熊貓的csv中獲得了一個相當大的數據框。如何修改熊貓中某些列的全文

問題是,在一些列上,我得到了文本字符串,我想隔離最後一個字符以將其轉換爲整數。

我找到了一個解決方案,但我確信它不是最高效的。 它是這樣的:

import pandas as pd 

df = pd.read_csv("filename") 

cols = list(df.loc[:, 'col_a':'column_s']) 
df_filtered = df[cols].dropna() 

df_filtered['col_o'] = df_filtered['col_o'].str[-1:] 
df_filtered['col_p'] = df_filtered['col_p'].str[-1:] 
df_filtered['col_q'] = df_filtered['col_q'].str[-1:] 
df_filtered['col_r'] = df_filtered['col_r'].str[-1:] 
df_filtered['col_s'] = df_filtered['col_s'].str[-1:] 

在寫作方面,這是不是真的有效。所以,我已經試過這樣的事情:

colstofilter = list(df_filtered.loc[:, 'col_o':'col_s']) 

for col in df_filtered[colstofilter]: 
    print(df_filtered[col].str[-1:].head()) 

打印它給人正是我想要的,但是當我試圖把它變成一個功能或蘭巴或將其應用到數據幀,我得到一個錯誤,它的不支持

回答

3

試試這個:

df_filtered.loc[:, 'col_o':'col_s'] = \ 
    df_filtered.loc[:, 'col_o':'col_s'].apply(lambda x: x.str[-1]) 
+0

它的工作原理就像一個魅力更新df!非常感謝 ! –

1

考慮數據框df

from string import ascii_lowercase 

df = pd.DataFrame(
    'ABC', list('xyz'), 
    list(ascii_lowercase[:10]) 
).add_prefix('col_') 

df 

    col_a col_b col_c col_d col_e col_f col_g col_h col_i col_j 
x ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC 
y ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC 
z ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC 

update + loc + stack/str/unstack
stack做一個系列,所以我們可以稱之爲str一次。
unstack將其帶回數據框。
update到位

df.update(df.loc[:, 'col_d':'col_g'].stack().str[-1].unstack()) 

df 

    col_a col_b col_c col_d col_e col_f col_g col_h col_i col_j 
x ABC ABC ABC  C  C  C  C ABC ABC ABC 
y ABC ABC ABC  C  C  C  C ABC ABC ABC 
z ABC ABC ABC  C  C  C  C ABC ABC ABC