在 Python 中的列中拆分字符串
Posted
技术标签:
【中文标题】在 Python 中的列中拆分字符串【英文标题】:Split string in columns in Python 【发布时间】:2021-12-26 02:26:37 【问题描述】:我有一个这样的列表:
[['contributionScore': 0.841473400592804, 'variable': 'series_2',
'contributionScore': 0.6113986968994141, 'variable': 'series_3',
'contributionScore': 0.5985525250434875, 'variable': 'series_1',
'contributionScore': 0.5641148686408997, 'variable': 'series_4',
'contributionScore': 0.138543963432312, 'variable': 'series_0'],
['contributionScore': 1.1316605806350708, 'variable': 'series_1',
'contributionScore': 0.5188271403312683, 'variable': 'series_4',
'contributionScore': 0.38711458444595337, 'variable': 'series_3',
'contributionScore': 0.35055238008499146, 'variable': 'series_0',
'contributionScore': 0.06044715642929077, 'variable': 'series_2']]
如何获取每个系列都有一列的数据框?
我想为每个系列获取一个带有contributionScore 的数据框。
谢谢!
【问题讨论】:
【参考方案1】:我对这个说法有点困惑
如何获取每个系列都有一列的数据框?
如果您的意思是单列,对于所有列“变量”的系列数据,那么 Celius Stingher 的答案应该足够好。
如果您的意思是在每个系列值中作为单独的列, 我将 Celius 的回答扩展为:
##As already stated above
df = pd.concat([pd.DataFrame(x) for x in raw_list])
##To get a sorted list of unique Series values
series_list = sorted(df['variable'].unique())
##We first get a dictionary where each key is the unique series value and each dictionary value is the list of contributionScore unique to that series value. We turn it into a DataFrame in the end
series_df = pd.DataFrame(series : list(df[df['variable'] == series]["contributionScore"]) for series in series_list)
输出看起来像
series_0 series_1 series_2 series_3 series_4
0 0.138544 0.598553 0.841473 0.611399 0.564115
1 0.350552 1.131661 0.060447 0.387115 0.518827
提醒一下,这仅在系列值都具有相同的贡献分数计数时才有效。(所有系列在上面各有 2 个贡献分数)
如果每个系列有不同的贡献分值计数,这将在第三条语句替换为如下所示的行时起作用:
## We turn each "series" value and their contribution score as DataFrame and concatenate them to accommodate for the varying array lengths of each "series" column.
series_df = pd.concat([pd.DataFrame(series : list(df[df['variable'] == series]["contributionScore"])) for series in series_list], axis = 1)
示例:如果 series_3 有 3 个贡献分数,它将如下所示
series_0 series_1 series_2 series_3 series_4
0 0.138544 0.598553 0.841473 0.611399 0.564115
1 0.350552 1.131661 0.060447 0.387115 0.518827
2 NaN NaN NaN 1.200000 NaN
pd.concat 在这里所做的是它允许我们将不同列长度的 pandas DataFrame 连接在一起。它用 NaN 填充间隙值。以前仅使用 pd.DataFrame() 是不可能的。 “axis = 1”参数告诉函数将列表中创建的 DataFrames 加入到每个列中“连接”。
【讨论】:
这太棒了!谢谢 @lucacanonico。我也为此添加了警告和解决方法。请确保你检查出来。如果对您有用,请将答案标记为完整!【参考方案2】:您应该能够使用pd.DataFrame()
创建数据框。由于列表中的每个元素本身都是一个数据框,因此您可以尝试使用列表推导。
假设列表名为“raw_list”:
df = pd.concat([pd.DataFrame(x).pivot_table(columns='variables') for x in raw_list])
这将输出:
contributionScore variable
0 0.841473 series_2
1 0.611399 series_3
2 0.598553 series_1
3 0.564115 series_4
4 0.138544 series_0
编辑:
鉴于 OP 的评论,我们应该首先旋转表格:
df = pd.concat([pd.DataFrame(x).pivot_table(columns='variables') for x in raw_list])
输出:
variable series_0 series_1 series_2 series_3 series_4
contributionScore 0.138544 0.598553 0.841473 0.611399 0.564115
contributionScore 0.350552 1.131661 0.060447 0.387115 0.518827
【讨论】:
是的,但是通过这种方式我附加行我想获得一个数据框,其中列contributionScore、series_0、series_1、series_2、series_3、series_4 谢谢,我不明白您的预期输出是什么。请记住将其包含在内,以便我们更容易理解需要什么。然后就像旋转桌子一样简单。请检查编辑。以上是关于在 Python 中的列中拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:如何在数据框的列中拆分已排序的字典