在python中解析多个系列并重命名头

时间:2018-04-25 06:33:28

标签: python pandas import

我的价格数据看起来像这样。(snippit of it)

import pandas as pd
df = pd.read_csv("price.csv", low_memory=False)
print(df.head())

   Unnamed: 0  233740 KS Equity  Unnamed: 2  233160 KS Equity   
0  2015-12-17           10330.0  2017-08-31           10460.0    
1  2015-12-18           10710.0  2017-09-01           10815.0    
2  2015-12-21           10720.0  2017-09-04           10835.0   
3  2015-12-22           10495.0  2017-09-05           10660.0   
4  2015-12-23           10425.0  2017-09-06           10535.0

你会看到

  1. 时间序列的起点和终点因两列不同而

  2. 有一个空单元格需要填写“date_23340 KS Equity”或其他东西。

  3. 我喜欢通过股票以有效的方式导入这个巨大的文件,并且最重要的是,将空单元格的名称更改为“date_equities”name。我怎样才能将这个包含日期和值的数据帧分开?

2 个答案:

答案 0 :(得分:1)

首先按班次名称创建Series,按第一个空格拆分并附加Date,最后过滤{1}}索引值和Unnamed列名称:

rename

如果需要从所有数据创建2或3列,请先按split创建s = df.columns.to_series().shift(-1).str.split(n=1).str[0] + ' Date' s = s[s.index.str.startswith('Unnamed')] print (s) Unnamed: 0 233740 Date Unnamed: 2 233160 Date dtype: object df = df.rename(columns=s) print (df) 233740 Date 233740 KS Equity 233160 Date 233160 KS Equity 0 2015-12-17 10330.0 2017-08-31 10460.0 1 2015-12-18 10710.0 2017-09-01 10815.0 2 2015-12-21 10720.0 2017-09-04 10835.0 3 2015-12-22 10495.0 2017-09-05 10660.0 4 2015-12-23 10425.0 2017-09-06 10535.0 ,然后拨打unstack

MultiIndex

编辑:

多个不同标头的解决方案:

df.columns = df.columns.str.split(n=1, expand=True)
df = df.stack(0).reset_index(level=0, drop=True).rename_axis('val').reset_index()
print (df)
      val        Date  KS Equity
0  233160  2017-08-31    10460.0
1  233740  2015-12-17    10330.0
2  233160  2017-09-01    10815.0
3  233740  2015-12-18    10710.0
4  233160  2017-09-04    10835.0
5  233740  2015-12-21    10720.0
6  233160  2017-09-05    10660.0
7  233740  2015-12-22    10495.0
8  233160  2017-09-06    10535.0
9  233740  2015-12-23    10425.0

在第一个数字的列表理解组中,创建dataetimeindex并连接在一起。最后由#create dummy data df1 = df.copy() df1.columns = ['Unnamed: 4','233 JP Equity','Unnamed: 6','235 JP Equity'] df = df.join(df1) print (df) Unnamed: 0 233740 KS Equity Unnamed: 2 233160 KS Equity Unnamed: 4 \ 0 2015-12-17 10330.0 2017-08-31 10460.0 2015-12-17 1 2015-12-18 10710.0 2017-09-01 10815.0 2015-12-18 2 2015-12-21 10720.0 2017-09-04 10835.0 2015-12-21 3 2015-12-22 10495.0 2017-09-05 10660.0 2015-12-22 4 2015-12-23 10425.0 2017-09-06 10535.0 2015-12-23 233 JP Equity Unnamed: 6 235 JP Equity 0 10330.0 2017-08-31 10460.0 1 10710.0 2017-09-01 10815.0 2 10720.0 2017-09-04 10835.0 3 10495.0 2017-09-05 10660.0 4 10425.0 2017-09-06 10535.0 s = df.columns.to_series().shift(-1) + ' Date' s = s[s.index.str.startswith('Unnamed')] print (s) Unnamed: 0 233740 KS Equity Date Unnamed: 2 233160 KS Equity Date Unnamed: 4 233 JP Equity Date Unnamed: 6 235 JP Equity Date dtype: object df = df.rename(columns=s) stack重新设定,以移除unstack s:

NaN

答案 1 :(得分:0)

如果您对文件第一行的pandas生成的自动标题不满意,可以跳过它,告诉pandas不生成标题并提供自己的标题。 除此之外,您还可以选择要读入的列:

df_1 = pd.read_csv("price.csv", usecols = [0,1], skiprows=1, header=['date', 'equity'])

df_2 = pd.read_csv("price.csv", usecols = [2,3], skiprows=1, header=['date', 'equity'])