使用pandas读取单列文件



我正在尝试将以下文件读取到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

您需要从字典中创建数据帧:

  1. 导入熊猫库:

    import pandas as pd
    
  2. 从列表中创建字典:

    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]}
    
  3. 创建数据框架:

    df = pd.DataFrame(data)
    
  4. 调用你的数据帧:

    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

最新更新