【问题标题】:Split Column containing 2 values into different column in pandas df将包含 2 个值的列拆分为 pandas df 中的不同列
【发布时间】:2017-03-31 11:19:31
【问题描述】:

我在 pandas df 中有一张桌子

bigram         frequency
(123,3245)       2
(676,35346)      84
(93,32)          9

以此类推,直到 50 行。

我正在寻找的是,将 bigram 列拆分为两个不同的列,去掉括号和逗号,

col1     col2      frequency
123       3245        2
676       35346       84
93        32          9

如果逗号后有什么方法可以拆分,去掉括号。

【问题讨论】:

  • 二元列中有什么?它们是元组还是元组格式的字符串?检查type(df.bigram.iloc[0])
  • @Psidom 类型是 tuple

标签: python regex python-2.7 python-3.x pandas


【解决方案1】:

非常接近@Psidom 的答案。
我使用pd.DataFrame(df.bigram.values.tolist(), columns=['c1', 'c2']) 而不是df.bigram.apply(lambda x: pd.Series(x, index=['col1', 'col2']))

pd.concat([pd.DataFrame(df.bigram.values.tolist(), columns=['c1', 'c2']),
           df.drop('bigram', 1)],
          axis=1)

【讨论】:

  • 先生,我在运行您的代码时遇到错误。 labels ['Bigram'] not contained in axis
  • 是的,先生,但我在运行您的代码时分别从 bigram 到 Bigram 进行了更改
【解决方案2】:

尝试为每对元组创建一个新列。

df['col1'] = df['bigram'].apply(lambda x: x[0])
df['col2'] = df['bigram'].apply(lambda x: x[1])

要创建仅包含 col1col2frequency 的数据框,其中顺序很重要,更容易完全创建一个新的数据框并填充它。

df_new = pd.DataFrame()
df_new['col1'] = df['bigram'].apply(lambda x: x[0])
df_new['col2'] = df['bigram'].apply(lambda x: x[1])
df_new['frequency'] = df['frequency']

【讨论】:

  • 先生,您的结果给了我 4 列,我之前的两列 Bigram Frequency col1 col2。我在频率的右边,但我只想要col1 col2 frequency
  • 啊。您想要ONLY col1、col2 和频率,并且顺序很重要?
【解决方案3】:

如果您的bigram 列恰好是字符串格式,您可以使用带有正则表达式的.str.extract() 方法从中提取数字:

pd.concat([df.bigram.str.extract('(?P<col1>\d+),(?P<col2>\d+)'), df.frequency], axis = 1)

或者如果bigram 列是元组类型:

方法1:使用 pd.Series 从元组创建列:

pd.concat([df.bigram.apply(lambda x: pd.Series(x, index=['col1', 'col2'])), 
           df.frequency], axis=1)

方法2:使用.str从元组中获取第一个和第二个元素

df['col1'], df['col2'] = df.bigram.str[0], df.bigram.str[1]
df = df.drop('bigram', axis=1)

【讨论】:

  • 先生,您的方法 2 的结果给了我 4 列,我之前的两列 Bigram Frequency col1 col2。我在频率的右边,但我只想要col1 col2 frequency
  • 您可以使用df = df.drop('bigram', axis=1) 删除bigram 列。查看更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 2020-12-13
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多