我的价格数据看起来像这样。(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
你会看到
时间序列的起点和终点因两列不同而
有一个空单元格需要填写“date_23340 KS Equity”或其他东西。
我喜欢通过股票以有效的方式导入这个巨大的文件,并且最重要的是,将空单元格的名称更改为“date_equities”name。我怎样才能将这个包含日期和值的数据帧分开?
答案 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'])