我从pandas的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())
打印它可以提供我想要的内容,但是当我尝试将其转换为函数或lamba或将其应用于数据帧时,我会收到一条错误,表明它不受支持
答案 0 :(得分:3)
试试这个:
df_filtered.loc[:, 'col_o':'col_s'] = \
df_filtered.loc[:, 'col_o':'col_s'].apply(lambda x: x.str[-1])
答案 1 :(得分: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
到位
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