在 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)

Python Pandas:如何在数据框的列中拆分已排序的字典

拆分2列中的特殊字符并在oracle中合并为多行

在python中拆分键值字符串并将其移动到df列中

如何根据 pandas-python 中带有空格的图像拆分列中的值

如何在python中使用正则表达式在字符串之间选择值并放置在数据框的列中