2017-04-18 19 views
6

Tôi nhận được một khung dữ liệu khá lớn từ một csv trong gấu trúc.Cách sửa đổi toàn bộ văn bản của một số cột trong gấu trúc

Vấn đề là trên một số cột tôi nhận được chuỗi văn bản mà tôi muốn cô lập ký tự cuối cùng để biến nó thành số nguyên.

Tôi đã tìm được giải pháp, nhưng tôi khá chắc chắn nó không hiệu quả nhất. Nó giống như sau:

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:] 

Về mặt văn bản, điều này không thực sự hiệu quả. một cái gì đó vì vậy tôi đã cố gắng như thế này:

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

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

in nó mang lại cho chính xác những gì tôi muốn, nhưng khi tôi cố gắng biến nó thành một chức năng hoặc một lamba hoặc áp dụng nó vào các dataframe, tôi nhận được một lỗi rằng đó là không được hỗ trợ

Trả lời

3

Hãy thử điều này:

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

Nó hoạt động như một nét duyên dáng! Cảm ơn rất nhiều ! –

1

Xem xét dataframe 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 để làm cho một loạt nghiên cứu vì vậy chúng tôi có thể gọi str chỉ một lần.
unstack để đưa nó trở lại một khung dữ liệu.
update để cập nhật df tại chỗ

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 
Các vấn đề liên quan