我正在尝试将以下文件读取到pandas数据框架中:
(dataA
0
400
2800
9200
5600
2000
8400
4800
1200
7600
4000
400
6800
)
(dataB
30
30
30
30
30
30
20
500
30
50
330
530
930
)
目标是有这样的东西:
dataA dataB
0 30
400 30
2800 30
9200 30
5600 30
2000 30
8400 20
4800 500
1200 30
7600 50
4000 330
400 530
6800 930
我知道这可以通过逐行读取文件来完成,但我想知道是否有一种简单的方法可以让pandas读取它(例如read_csv)。这是因为有很多类似的文件,并且这种类型的数据的后处理已经自动化了。
基于使用括号分隔列的事实,我们可以创建两个新索引并解栈列。
用header=None
读你的文件很重要
df = pd.read_excel(...,header=None)
s = df[0].str.contains('(',regex=True)
df1 = df.set_index([s.cumsum(), df.groupby(s.cumsum()).cumcount()]).unstack(0)
#additional clean up
df1 = df1.replace('(|)','',regex=True).replace('',np.nan).dropna().droplevel(0,1)
#setup columns.
df1.columns = df1.iloc[0]
df1 = df1.iloc[1:]
print(df1)
0 dataA dataB
1 0 30
2 400 30
3 2800 30
4 9200 30
5 5600 30
6 2000 30
7 8400 20
8 4800 500
9 1200 30
10 7600 50
11 4000 330
12 400 530
13 6800 930
您需要从字典中创建数据帧的:
-
导入熊猫库:
import pandas as pd
-
从列表中创建字典:
data = { 'dataA': [0,400 ,2800,9200,5600,2000,8400,4800,1200,7600,4000,400,6800], 'dataB': [30,30,30,30,30,30,20,500,30,50,330,530,930]}
-
创建数据框架:
df = pd.DataFrame(data)
-
调用你的数据帧:
df
总的来说,您可以看到全部代码:
import pandas as pd
data = { 'dataA': [0,400 ,2800,9200,5600,2000,8400,4800,1200,7600,4000,400,6800],
'dataB': [30,30,30,30,30,30,20,500,30,50,330,530,930]}
df = pd.DataFrame(data)
df
,输出将是:
dataA dataB
0 0 30
1 400 30
2 2800 30
3 9200 30
4 5600 30
5 2000 30
6 8400 20
7 4800 500
8 1200 30
9 7600 50
10 4000 330
11 400 530
12 6800 930
如果你愿意不查看数据框中的行数,在末尾添加以下代码:
print(df.to_string(index=False))
输出将是:
dataA dataB
0 30
400 30
2800 30
9200 30
5600 30
2000 30
8400 20
4800 500
1200 30
7600 50
4000 330
400 530
6800 930