我有一个DataFrame,其中一列填充了字符串。我想删除列中任何单个字母的外观。到目前为止,我已经尝试过:
df['STRI'] = df['STRI'].map(lambda x: " ".join(x.split() if len(x) >1)
我希望输入ABCD X WYZ
并获取ABCD WYZ
。
答案 0 :(得分:3)
您可以使用str.replace
和正则表达式。模式\b\w\b
将用单词边界替换任何单个单词字符。见下面的工作示例:
使用系列的例子:
s = pd.Series(['Katherine','Katherine and Bob','Katherine I','Katherine', 'Robert', 'Anne', 'Fred', 'Susan', 'other'])
s.str.replace(r'\b\w\b','').str.replace(r'\s+', ' ')
0 Katherine
1 Katherine and Bob
2 Katherine
3 Katherine
4 Robert
5 Anne
6 Fred
7 Susan
8 other
dtype: object
测试数据的另一个例子:
s = pd.Series(['ABCD','X','WYZ'])
0 ABCD
1 X
2 WYZ
dtype: object
s.str.replace(r'\b\w\b','').str.replace(r'\s+', ' ')
0 ABCD
1
2 WYZ
dtype: object
您的数据是:
df['STRI'].str.replace(r'\b\w\b','').str.replace(r'\s+', ' ')
答案 1 :(得分:2)
试试这个:
df['STRI'] = npi['STRI'].str.replace(r'\b\w\b', '').str.replace(r'\s+', ' ')
例如:
import pandas as pd
df = pd.DataFrame(data=['X ABCD X X WEB X'], columns=['c1'])
print df, '\n'
df.c1 = df.c1.str.replace(r'\b\w\b', '').str.replace(r'\s+', ' ')
print df
输出:
c1
0 X ABCD X X WEB X
c1
0 ABCD WEB
答案 2 :(得分:2)
列表理解
[
' '.join([i for i in s.split() if len(i) > 1])
for s in npi.STRI.values.tolist()
]
str.split
s = npi.STRI.str.split(expand=True).stack()
s[s.str.len() > 1].groupby(level=0).apply(' '.join)