我正在通过ThinkStats工作,但也决定学习Pandas。因此,下面的代码从文件中读取数据,进行一些检查,然后将数据附加到列表中。我最终得到了几个包含我需要的数据的列表。下面的代码有效(除了加扰列...)
我的问题是:从这些列表构建数据框的最佳方法是什么?更一般地说,我是否以最有效的方式实现了我的目标?
preglength = []
caseid = []
outcome = []
birthorder = []
finalweight = []
with open('2002FemPreg.dat') as f:
for line in f:
caseid.append(int(line[0:13].strip()))
preglength.append(int(line[274:276].strip()))
outcome.append(int(line[276].strip()))
try:
birthorder.append(int(line[277:279]))
except ValueError:
birthorder.append(np.nan)
finalweight.append(float(line[422:440].strip()))
c1 = pd.Series(caseid)
c2 = pd.Series(preglength)
c3 = pd.Series(outcome)
c4 = pd.Series(birthorder)
c5 = pd.Series(finalweight)
data = pd.DataFrame({'caseid': c1,'preglength': c2,'outcome': c3,'birthorder': c4,'weight': c5})
print(data.head())
答案 0 :(得分:2)
我可能会使用read_fwf
:
>>> df = pd.read_fwf("2002FemPreg.dat",
... colspecs=[(0,13), (274, 276), (276, 277), (277, 279), (422, 440)],
... names=["caseid", "preglength", "outcome", "birthorder", "finalweight"])
>>> df.head()
caseid preglength outcome birthorder finalweight
0 1 39 1 1 6448.271112
1 1 39 1 2 6448.271112
2 2 39 1 1 12999.542264
3 2 39 1 2 12999.542264
4 2 39 1 3 12999.542264
[5 rows x 5 columns]