Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python、pandas修改数据系列的每个元素(将字符串数据列表修改为单个字符串)?_Python_Pandas - Fatal编程技术网

如何使用python、pandas修改数据系列的每个元素(将字符串数据列表修改为单个字符串)?

如何使用python、pandas修改数据系列的每个元素(将字符串数据列表修改为单个字符串)?,python,pandas,Python,Pandas,如何更改数据系列中的每个数据,让我详细解释一下。 我有一个板球比赛数据集,我想从整个数据集中找出两支球队相互比赛的次数 team_names total_count ['Afghanistan','Bangladesh'] 1 我得到的结果是“阿富汗”和“孟加拉国”各打了一场。但这里我想修改这个数据框。我不想显示['Afghanistan'、'Bangladesh'],而是想显示如下数据: team_names to

如何更改数据系列中的每个数据,让我详细解释一下。 我有一个板球比赛数据集,我想从整个数据集中找出两支球队相互比赛的次数

team_names                    total_count

['Afghanistan','Bangladesh']    1

我得到的结果是“阿富汗”和“孟加拉国”各打了一场。但这里我想修改这个数据框。我不想显示['Afghanistan'、'Bangladesh'],而是想显示如下数据:

team_names                total_count

'Afghanistan-Bangladesh'    1
如何做到这一点

(我试过:

1) df["team_names1"] = df['team_names'].str.join("-")

2) df['team_names1'] = df['team_names'].apply(lambda x: '-'.join(x))

3) df['team_names1'] = df['team_names'].apply(lambda x: '-'.join(x),1) 
但它们都没有给我正确的输出。以上所有代码都产生相同的输出:

team_names                                           total_count
[-'-A-f-g-h-a-n-i-s-t-a-n-'-,- -'-B-a-n-g-l-a-..]       1

如果团队名称的值是字符串列表,请使用:

df["team_names"] = df.team_names.str.join("-")
结果:

               team_names  total_count
0  Afghanistan-Bangladesh            1
               team_names  total_count
0  Afghanistan-Bangladesh            1
如果这些值实际上是字符串文字,那么最好的选择是首先使用
ast.literal\u eval
将它们转换为所需的数据类型(字符串列表):

import ast
df["team_names"] = df.team_names.apply(ast.literal_eval)
df["team_names"] = df.team_names.str.join("-")
结果:

               team_names  total_count
0  Afghanistan-Bangladesh            1
               team_names  total_count
0  Afghanistan-Bangladesh            1

编辑:为了清晰起见,我重新创建了数据框

df = pd.DataFrame({'team_names' : [['Afghanistan','Bangladesh'], ['Afghanistan','England']], 'total_count': [1,2] })
df['team_names'] = df['team_names'].apply(lambda x: str(x))
df
输出:

    team_names                      total_count
0   ['Afghanistan', 'Bangladesh']   1
1   ['Afghanistan', 'England']      2
    team_names              total_count
0   Afghanistan-Bangladesh  1
1   Afghanistan-England     2
注意!列“团队名称”与列表中的
list
相似,但实际上它们是
string
。若要将相似的字符串转换回列表,请使用
eval()

输出:

    team_names                      total_count
0   ['Afghanistan', 'Bangladesh']   1
1   ['Afghanistan', 'England']      2
    team_names              total_count
0   Afghanistan-Bangladesh  1
1   Afghanistan-England     2

使用
df['team_names']=df['team_names'].apply(lambda x:'-'.join(x),1)
我已经尝试过了,但是很抱歉它不起作用。错误消息是什么?它将完整的列表分开,如[-'-A-f-g-h-A-n-I-s-t-A-n-'-'-B-A-n-g-l-A-…]修改后的解决方案您也可以使用
eval()
@Gaurav,我已经修改了解决方案谢谢@Black Raven它能用。@GauravSurana,你能帮我把我的答案标记为正确答案吗?