繁体   English   中英

将 pandas 数据框列值转换为逗号分隔的字符串

[英]convert pandas data frame column values into comma separated strings

我有一个看起来像这样的数据框:

    Column1                      Column2

'['jjhjh', 'adads','adsd']',    'dwdwdqw'
'['adads','adsd']',             'dwdwdqw'
'['jjhjh', 'adads','adsd']',    'dwdwdqw'
'['adads','adsd']',             'dwdwdqw'
'['adads','adsd']',             'dwdwdqw'

尽管 Column1 中的项目看起来像项目列表,但它们是字符串。 我想从此字符串中删除方括号,删除引号并将该列中的所有值替换为相同的值,但以逗号分隔的字符串。 我想要的 output 是:

   Column1                   Column2

'jjhjh', 'adads','adsd',    'dwdwdqw'
'adads','adsd',             'dwdwdqw'
'jjhjh', 'adads','adsd',    'dwdwdqw'
'adads','adsd',             'dwdwdqw'
'adads','adsd',             'dwdwdqw'

我尝试了以下 function 但它没有替换元素:

def string_convert(column_name):
  lista=[]
  for i in column_name:
    i=i.strip("[]")
    i=eval(i)
    lista.append(i)
  for m in lista:
    if m == tuple:
      column_name = m[0] + ',' + m[1]
    else:
      column_name = m
  return df['other']

谁能帮我这个? 提前致谢。

根据问题创建者在她自己的答案中包含的新的最终需求,比如生成一个所有值为column1的最终列表,我建议按如下方式进行:

import pandas as pd

df = pd.DataFrame(columns=['column1','column2'])
df['column1'] = ["'['jjhjh', 'adads','adsd']'","'['adads','adsd']'","'['jjhjh', 'adads','adsd']'","'['adads','adsd']'","'['adads','adsd']'"]
df['column2'] = ['dwdwdqw','dwdwdqw','dwdwdqw','dwdwdqw','dwdwdqw']

df['column1'] = df['column1'].replace('\[|\'|\"|\]| ', '', regex=True)

df['column1'] = df['column1'].str.split(',')

final_list = [x for xs in df['column1'].tolist() for x in xs]

print(final_list)

Output:

['jjhjh', 'adads', 'adsd', 'adads', 'adsd', 'jjhjh', 'adads', 'adsd', 'adads', 'adsd', 'adads', 'adsd']

但我承认这种方法存在风险,因为如果你想要的字符串在单词之间有空格,它们将被删除,所以在你的情况下我仍然认为你应该小心使用。

来自巴西的问候!

这个循环对我有用。

for i, row in df.iterrows():
    tmp_val = row['Column1'].replace("'", "").replace("[", "").replace("]", "").split(',')
    row['Column1'] = tmp_val

这遍历 DataFrame 的每一行,并通过执行字符串替换来删除不需要的字符(方括号和单引号)来修改 Column1 中的单元格。 Then.split(',') 创建列表,最后一行代码用我们新创建的列表替换原始值。

通过利用str.replace()

df.assign(Column1=df['Column1'].str.replace(r"'\[(.*)\]',", r"\1,", regex=True))

                    Column1                 Column2
0  'jjhjh', 'adads','adsd',               'dwdwdqw'
1           'adads','adsd',               'dwdwdqw'
2  'jjhjh', 'adads','adsd',               'dwdwdqw'
3           'adads','adsd',               'dwdwdqw'
4           'adads','adsd',               'dwdwdqw'

我的案例的最佳解决方案是下面的代码,因为我在每个字符串中都有引号、双引号和方括号。 使用此代码,我可以删除所有内容,然后在 For 循环中删除不必要的空格并将每一行拆分为一个列表:

df['column1']=df['column1'].replace('\[|\'|\"|\]', '', regex=True)

df['column1']=df['column1'].str.split(',')

lista=[]
for s in df['column1']:
  for a in s:
    lista.append(a)

lista1=[b.strip() for b in lista]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM