如何提取系列或数据框中的列的元素?

问题描述 投票:0回答:1

当我通过tappers_df['TAP_REOPEN_SCHEDULE']在笔记本中检查数据框时,数据框中的对象列看起来像这样>

Jupiter notebook image

数据框的索引由您可以在图像中看到的'Corp'字符串组成。 [[双括号]]中的“ TAP_REOPEN_SCHEDULE”列是日期,后跟金额。每个不同的“ Corp”索引项在列表中出现2到16次,并且在“ TAP_REOPEN_SCHEDULE”列中具有1到15个日期/金额对。因此,对于出现两次的“ Corp”索引项,该列的行看起来像这样:

  • AF125751 Corp [[2015-07-17,5150.0]]
  • AF125751 Corp [[2015-07-17,5150.0]]
  • 对于出现三遍的“ Corp”索引项,行如下所示:

  • AL997424 Corp [[2017-06-01,1632000.0],[2017-12-07,1065000]]
  • AL997424 Corp [[2017-06-01,1632000.0],[2017-12-07,1065000]]
  • AL997424 Corp [[2017-06-01,1632000.0],[2017-12-07,1065000]]
  • 依此类推。对于每个“ Corp”索引项的第一个实例,我正在从数据框中的其他列中获取所需的日期和数量。对于后续的内容,我尝试将此列拆分为各个组成部分,以使结果看起来像这样(注意:我在这里仅将'|'用作两列之间的视觉分界)] >

  • AF125751 Corp [1st date] | [第一笔金额] (再次从其他列中提取)
  • [AF125751 Corp 2015-07-17 | 5150.0 (即第一个也是唯一的TAP_REOPEN_SCHEDULE日期/金额对)
  • AL997424 Corp [1st date] | [第一笔金额] (再次从其他列中提取)
  • AL997424 Corp 2017年6月1日| 1632000.0 (即,两个TAP_REOPEN_SCHEDULE日期/金额对中的第一个)
  • AL997424 Corp 2017-12-07 | 1065000 (即,两个TAP_REOPEN_SCHEDULE日期/金额对中的第二个)
  • 我是初学者,因此请具体说明您的建议。我已经尝试过extractiloclocnp.where的每一次迭代以及其他我能想到的东西。非常感谢或您的帮助!

我在数据框中有一列对象,当我通过tappers_df ['TAP_REOPEN_SCHEDULE'在我的笔记本中对其进行检查时,看起来像这样,它看起来像木星笔记本图像。

这对您有用吗?
import pandas as pd df_dict = {'index': ['AF125751 Corp', 'AL997424 Corp', 'AL997424 Corp'], 'TAP_REOPEN_SCHEDULE': [[['2015-07-17', 5150.0]], [['2017-06-01', 1632000.0], ['2017-12-07', 1065000]], [['2017-06-01', 1632000.0], ['2017-12-07', 1065000]]]} df = pd.DataFrame.from_dict(df_dict).set_index('index') s = df.apply(lambda d: pd.Series(d['TAP_REOPEN_SCHEDULE']), axis=1).stack().reset_index(level=1, drop=True) df_split = pd.DataFrame(s, columns=['TAP_REOPEN_SCHEDULE']) pd.DataFrame(df_split['TAP_REOPEN_SCHEDULE'].values.tolist(), columns=['DATE', 'VALUE'], index=df_split.index)

代码从每个嵌套列表中创建一个Series(每个Series行是一个[日期,值]对),堆叠这些Series,然后重置在堆叠过程中创建的MultiIndex。这将产生一个Series对象。接下来,它重新创建一个DataFrame对象,该对象与您刚开始时使用的对象相似。

顺便说一句,您还可以通过运行以下命令删除重复的行:

df[~df.index.duplicated()]['TAP_REOPEN_SCHEDULE']

python pandas dataframe extract
1个回答
0
投票
import pandas as pd df_dict = {'index': ['AF125751 Corp', 'AL997424 Corp', 'AL997424 Corp'], 'TAP_REOPEN_SCHEDULE': [[['2015-07-17', 5150.0]], [['2017-06-01', 1632000.0], ['2017-12-07', 1065000]], [['2017-06-01', 1632000.0], ['2017-12-07', 1065000]]]} df = pd.DataFrame.from_dict(df_dict).set_index('index') s = df.apply(lambda d: pd.Series(d['TAP_REOPEN_SCHEDULE']), axis=1).stack().reset_index(level=1, drop=True) df_split = pd.DataFrame(s, columns=['TAP_REOPEN_SCHEDULE']) pd.DataFrame(df_split['TAP_REOPEN_SCHEDULE'].values.tolist(), columns=['DATE', 'VALUE'], index=df_split.index)
© www.soinside.com 2019 - 2024. All rights reserved.