将数据框中的表列拆分为单独的 csv



我有一个这样的示例df,我想按日期,ID和ID_BB_GLOBAL分开,并添加列"日期"在每个表上使用各自的日期,并创建一个格式为"ID,ID_BB_GLOBAL, date"的CSV文件。列。有人知道怎么做吗,熊猫?

https://i.stack.imgur.com/pznsM.png

> 0   2020-01-31 00:00:00                   NaN 2020-02-28 00:00:00  ...                   NaN 2020-12-31 00:00:00                   NaN
3                    ID  ID_BB_GLOBAL().value                  ID  ...  ID_BB_GLOBAL().value                  ID  ID_BB_GLOBAL().value
4           A UN Equity          BBG000C2V541         A UN Equity  ...          BBG00Y2JBWP1         A UN Equity          BBG000C2V541
5         AAL UW Equity          BBG005P7Q8V5       AAL UW Equity  ...          BBG000C2V541       AAL UW Equity          BBG005P7Q8V5
6         AAP UN Equity          BBG000F7RFH6       AAP UN Equity  ...          BBG005P7Q8V5       AAP UN Equity          BBG000F7RFH6
7        AAPL UW Equity          BBG000B9Y5X2      AAPL UW Equity  ...          BBG000F7RFH6      AAPL UW Equity          BBG000B9Y5X2

对于我的测试,我使用了从您的数据中提取的内容(nan当然是np.nan):

pd.DataFrame([['2020-01-31 00:00:00', nan, '2020-02-28 00:00:00', nan, 
'2020-12-31 00:00:00', nan], 
['ID', 'ID_BB_GLOBAL().value', 'ID', 'ID_BB_GLOBAL().value',
'ID', 'ID_BB_GLOBAL().value'],
['A UN Equity', 'BBG000C2V541', 'A UN Equity', 'BBG00Y2JBWP1',
'A UN Equity', 'BBG000C2V541'],
['AAL UW Equity', 'BBG005P7Q8V5', 'AAL UW Equity',
'BBG000C2V541', 'AAL UW Equity', 'BBG005P7Q8V5'],
['AAP UN Equity', 'BBG000F7RFH6', 'AAP UN Equity',
'BBG005P7Q8V5', 'AAP UN Equity', 'BBG000F7RFH6'],
['AAPL UW Equity', 'BBG000B9Y5X2', 'AAPL UW Equity',
'BBG000F7RFH6', 'AAPL UW Equity', 'BBG000B9Y5X2']],
index=[0, 3, 4, 5, 6, 7])

它看起来像:

1                     2                    3                     4                    5                     6
0  2020-01-31 00:00:00                   NaN  2020-02-28 00:00:00                   NaN  2020-12-31 00:00:00                   NaN
3                   ID  ID_BB_GLOBAL().value                   ID  ID_BB_GLOBAL().value                   ID  ID_BB_GLOBAL().value
4          A UN Equity          BBG000C2V541          A UN Equity          BBG00Y2JBWP1          A UN Equity          BBG000C2V541
5        AAL UW Equity          BBG005P7Q8V5        AAL UW Equity          BBG000C2V541        AAL UW Equity          BBG005P7Q8V5
6        AAP UN Equity          BBG000F7RFH6        AAP UN Equity          BBG005P7Q8V5        AAP UN Equity          BBG000F7RFH6
7       AAPL UW Equity          BBG000B9Y5X2       AAPL UW Equity          BBG000F7RFH6       AAPL UW Equity          BBG000B9Y5X2

实际上,它不能用作数据框,因为并非所有行都包含一致的数据:

  • 第一个包含日期
  • 第二个包含看起来像列名的内容
  • 只有其他的包含实际数据

我将首先从第二行输入正确的列名,然后将数据帧分成两列。在每个项目上,我将使用第一个单元格中的日期添加一个日期列,并删除前两行。完成后,我将连接所有项并设置一个新索引。

在Pandas中,它可以是:

# set the columns from the second row
df.columns = df.iloc[1]
df = df.rename_axis(columns=None, index=None)
# split the dataframe by sets of 2 columns,adding each a date column from the
# first cell and dropping the first 2 rows
dfs = [df.iloc[:, i:i+2].assign(date=pd.to_datetime(df.iloc[0, i])).iloc[2:]
for i in range(0, len(df.columns), 2)]
# control the first item
print(dfs[0])
# concat the sub-frames
new_df = pd.concat(dfs, ignore_index=True)

第一项是:

ID ID_BB_GLOBAL().value       date
4     A UN Equity         BBG000C2V541 2020-01-31
5   AAL UW Equity         BBG005P7Q8V5 2020-01-31
6   AAP UN Equity         BBG000F7RFH6 2020-01-31
7  AAPL UW Equity         BBG000B9Y5X2 2020-01-31

嗯,看起来不错…

,最终数据帧为:

ID ID_BB_GLOBAL().value       date
0      A UN Equity         BBG000C2V541 2020-01-31
1    AAL UW Equity         BBG005P7Q8V5 2020-01-31
2    AAP UN Equity         BBG000F7RFH6 2020-01-31
3   AAPL UW Equity         BBG000B9Y5X2 2020-01-31
4      A UN Equity         BBG00Y2JBWP1 2020-02-28
5    AAL UW Equity         BBG000C2V541 2020-02-28
6    AAP UN Equity         BBG005P7Q8V5 2020-02-28
7   AAPL UW Equity         BBG000F7RFH6 2020-02-28
8      A UN Equity         BBG000C2V541 2020-12-31
9    AAL UW Equity         BBG005P7Q8V5 2020-12-31
10   AAP UN Equity         BBG000F7RFH6 2020-12-31
11  AAPL UW Equity         BBG000B9Y5X2 2020-12-31

相关内容

  • 没有找到相关文章