如何逐行读取数据并返回数据帧

时间:2017-10-02 19:39:23

标签: python list pandas dataframe readline

逐行读取数据

for line in sys.stdin:

    print(line)

每行输入如下:

纽约100 奥兰多200
LA 300
D.C. 400

我想要的输出是一个数据帧:

         city     value
    0  New York    100
    1   Orlando    200
    2        LA    300
    3      D.C.    400

我正在做的方式是读取该行并将所有行保存为列表列表,其中每行内容都是一个列表

list_of_lists = []
for line in sys.stdin:
        new_list = [elem for elem in line.split()]
        list_of_lists.append(new_list)

然后将此list_of_lists转换为DataFrame。

我觉得这种方式非常愚蠢,所以我想知道是否还有其他办法。 谢谢。

2 个答案:

答案 0 :(得分:2)

import sys, re, pandas as pd

data = sys.stdin.read().splitlines()   # obtaining the list of lines from stdin
data = [re.split(r'\s+(?=\d+$)', l) for l in data]  # split each line into 2 items: `city` and `value`
df = pd.DataFrame(data, columns=['city','value'])   # constructing dataframe

print(df)

输出:

       city value
0  New York   100
1   Orlando   200
2        LA   300
3      D.C.   400

答案 1 :(得分:0)

使用str.rsplit从右侧分割,只有一次

list_of_lists = []
for line in sys.stdin:
        new_list = line.rsplit(1)
        list_of_lists.append(new_list)

或者,先放入熊猫系列

import sys, re, pandas as pd

data = sys.stdin.read().splitlines()

pd.Series(data, name='A').str.rsplit(n=1, expand=True)