我正在处理一个大约60k个文件的列表,这些文件的建模年份范围从1年到59000年。这些60k文件中的每个都在以下结构中(使用的数字是示例):
storm12345 10/6/ 48365
100
7463,75
7464,80
.
.
.
等等,长度不等。前两行是关于数据框的信息,但我特别需要识别并保留"年份",在本例中为48365,因此我可以返回并将整个文件分配为该年份,最好创建一个全新的列,标记为"year",即文件开头显示的年份,并为所有60k文件按照各自的年份执行此操作。
最终产品看起来像这样:
storm12345 10/6/ 48365
100
A, B, year
7463,75,48365
7464,80,48365
.
.
.
以此类推,其中最后一列是年份
作为奖励,我还需要标记列a和B,但是当我使用pd.read_csv
并指定header=[0,1]
时,我不再能够命名这些列并收到以下错误:
ValueError:指定多索引标头时不能指定名称
谢谢!
读取sep='n'
文件,因此DataFrame只包含一列
然后分配第一行和第二行来标记文件。
最后,拆分列。和dropna。
df = pd.read_csv(file, sep='n', header=None, dtype=str)
df['line_1st'] = df.iloc[0, 0]
df['line_2nd'] = df.iloc[1, 0]
df['year'] = df['line_1st'].str.extract(' (d+)$')
df[['A', 'B']] = df[0].str.split(',', n=1, expand=True).values
cols = ['A', 'B', 'year','line_1st', 'line_2nd']
dfn = df.dropna()[cols]
print(dfn)
A B year line_1st line_2nd
2 7463 75 48365 storm12345 10/6/ 48365 100
3 7464 80 48365 storm12345 10/6/ 48365 100