跳过行,但在 python 中读取 csv 时获取信息
Skip rows, but take information when reading csv in python
我的 csv 文件格式如下:
NAME: John
AGE: 19
HEIGHT: 178
COURSE; SEMESTER; GRADE; RESULT
MATH;1;10;PASS
BIOLOGY;2;5;FAIL
所以,headers 在一些行之后,我可以在阅读时跳过它,没有问题,但我希望第一行成为列,这样我就可以将所有文件合并到一个数据框中.第一个应该是这样来的:
NAME; AGE; HEIGHT; COURSE; SEMESTER; GRADE; RESULT
John; 19; 178;MATH;1;10;PASS
John; 19; 178; BIOLOGY;2;5;FAIL
嗯,这对我来说是一次很好的培训,所以谢谢你:)
d1 = '''
NAME: John
AGE: 19
HEIGHT: 178
COURSE; SEMESTER; GRADE; RESULT
MATH;1;10;PASS
BIOLOGY;2;5;FAIL
'''
df1 = pd.read_csv(StringIO(d1), sep=':', nrows=3, header=None)
df2 = pd.read_csv(StringIO(d1), sep=';', skiprows=4)
df1 = df1.T #transpose
df1.columns = df1.iloc[0] #make index[0] new header
df1 = df1.drop([0]) #remove old index[0] which is now a duplicate
df3 = pd.concat([df1, df2], axis=1).fillna(method="bfill") #concat and fill NaN
df3
index
NAME
AGE
HEIGHT
COURSE
SEMESTER
GRADE
RESULT
0
John
19
178
MATH
1
10
PASS
1
John
19
178
BIOLOGY
2
5
FAIL
注意:也许您应该尝试改进 scrap/clean/fill 您的 csv? ;)
我的 csv 文件格式如下:
NAME: John
AGE: 19
HEIGHT: 178
COURSE; SEMESTER; GRADE; RESULT
MATH;1;10;PASS
BIOLOGY;2;5;FAIL
所以,headers 在一些行之后,我可以在阅读时跳过它,没有问题,但我希望第一行成为列,这样我就可以将所有文件合并到一个数据框中.第一个应该是这样来的:
NAME; AGE; HEIGHT; COURSE; SEMESTER; GRADE; RESULT
John; 19; 178;MATH;1;10;PASS
John; 19; 178; BIOLOGY;2;5;FAIL
嗯,这对我来说是一次很好的培训,所以谢谢你:)
d1 = '''
NAME: John
AGE: 19
HEIGHT: 178
COURSE; SEMESTER; GRADE; RESULT
MATH;1;10;PASS
BIOLOGY;2;5;FAIL
'''
df1 = pd.read_csv(StringIO(d1), sep=':', nrows=3, header=None)
df2 = pd.read_csv(StringIO(d1), sep=';', skiprows=4)
df1 = df1.T #transpose
df1.columns = df1.iloc[0] #make index[0] new header
df1 = df1.drop([0]) #remove old index[0] which is now a duplicate
df3 = pd.concat([df1, df2], axis=1).fillna(method="bfill") #concat and fill NaN
df3
index | NAME | AGE | HEIGHT | COURSE | SEMESTER | GRADE | RESULT |
---|---|---|---|---|---|---|---|
0 | John | 19 | 178 | MATH | 1 | 10 | PASS |
1 | John | 19 | 178 | BIOLOGY | 2 | 5 | FAIL |
注意:也许您应该尝试改进 scrap/clean/fill 您的 csv? ;)