如何修改pandas中某些列的全文

时间:2017-04-18 21:44:46

标签: python python-3.x pandas dataframe

我从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或将其应用于数据帧时,我会收到一条错误,表明它不受支持

2 个答案:

答案 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