我正在尝试删除Pandas DataFrame中列下的字符串列表中的重复字符串。
例如,以下的列表值:
[btc, btc, btc]应该是;
[btc]但是,我尝试过多种方法,但似乎没有一种方法起作用,因为我无法访问列表中的字符串值。任何帮助都是非常感谢的。
DataFrame:
dollar_sign followers_count \
0 [btc] 35946
1 [btc] 35946
2 [btc] 35946
3 [nav] 35946
4 [btc, btc, btc] 35946访问列下的字符串列表
for row in df_twitter['dollar_sign']:
print row输出:
[btc]
[btc]
[btc]
[nav]
[btc, btc, btc]发布于 2018-04-04 22:07:28
从显示出来的信息来看,我相信OP的df实际上并不是充满了字符串的列表,而是看起来像列表的字符串。
从OP的打印结果,我们看到
[btc]
[btc]
[nav]
[btc, btc,btc]但是,如果它是字符串列表,则应该会产生
['btc']
['btc']
['btc']
['nav']
['btc', 'btc', 'btc']解决方案:
df = pd.DataFrame({
'dollar_sign':['[btc]','[btc]','[btc]','[nav]','[btc, btc, btc]'],
'followers_count':[35946,35946,35946,35946,35946]}
)
df.dollar_sign.str[1:-1].str.split(",\s").map(set)
0 {btc}
1 {btc}
2 {btc}
3 {nav}
4 {btc}
Name: dollar_sign, dtype: object.str[1:-1]移除[和]。str.split(",\s")用",“、逗号和空格分隔。(假设字符串使用",“作为分隔符,否则,您可能需要"\s*,\s*"或更复杂的东西。)map(set)将每个列表转换为一组。发布于 2018-04-04 14:54:17
你可以用布景。一组将取出复制件。
因此,作为一个例子,保持输出的样式:
for row in df_twitter['dollar_sign']:
print list(set(row))输出:
[btc]
[btc]
[btc]
[nav]
[btc]发布于 2018-04-04 14:54:52
您可以将list与map结合使用,set可以获得唯一的值。
df['dollar_sign']=list(map(set,df['dollar_sign']))
df
Out[1068]:
dollar_sign followers_count
0 {btc} 35946
1 {btc} 35946
2 {btc} 35946
3 {nav} 35946
4 {btc} 35946我就是这样创建df的
df=pd.DataFrame({'dollar_sign':[['btc'],['btc'],['btc'],['nav'],['btc','btc','btc']],'followers_count':[35946,35946
,35946
,35946
,35946
]})https://stackoverflow.com/questions/49654031
复制相似问题