我正在尝试从CSV文件中读取数据帧,其中具有列名的标题包括索引列上的名称。
示例数据我试过的代码:
# Open CSV
file= '507_002117.csv'
print(file)
df = pd.read_csv(file, header=6)
df = df.iloc[:, :11]
#print(df.dtypes)
print(df.head(5))
print(df['AlongTrack'])
返回如下内容:
Timestamp AlongTrack ... Pitch Roll
2022-03-31 21:38:30 0.000000 0.000000 ... -0.260261 0.93
2022-03-31 21:54:48 0.098491 -0.000042 ... -0.259386 0.93
2022-03-31 21:54:53 0.196983 -0.000086 ... -0.249085 0.93
2022-03-31 21:54:59 0.295475 -0.000117 ... -0.243554 0.92
2022-03-31 21:55:04 0.393967 -0.000172 ... -0.246343 0.92
如您所见,索引被正确地设置为时间戳,但是列名都被移到一个上。
我试过使用文档,关于read_csv的Pandas文档
它看起来像index_col将是票,但我似乎不能得到它的工作设置它在不同的值,但它所做的就是把东西移动了一行的索引,但标签仍然是错误的。
谁能给我指个正确的方向?谢谢你我可以通过创建一个列名计数比逗号分隔的数据列数少一个的CSV来重现这种情况。也许这就是你的处境。这样的:
sim_csv = io.StringIO('''Timestamp,AlongTrack,Pitch,Roll
2022-03-31 21:38:30,0.000000, 0.000000,-0.260261,0.93
2022-03-31 21:54:48,0.098491,-0.000042,-0.259386,0.93
2022-03-31 21:54:53,0.196983,-0.000086,-0.249085,0.93
2022-03-31 21:54:59,0.295475,-0.000117,-0.243554,0.92
2022-03-31 21:55:04,0.393967,-0.000172,-0.246343,0.92''')
df = pd.read_csv(sim_csv)
print(df)
Timestamp AlongTrack Pitch Roll
2022-03-31 21:38:30 0.000000 0.000000 -0.260261 0.93
2022-03-31 21:54:48 0.098491 -0.000042 -0.259386 0.93
2022-03-31 21:54:53 0.196983 -0.000086 -0.249085 0.93
2022-03-31 21:54:59 0.295475 -0.000117 -0.243554 0.92
2022-03-31 21:55:04 0.393967 -0.000172 -0.246343 0.92
有了正确的列标题数,我们就可以开始了:
sim_csv = io.StringIO('''Timestamp,AlongTrack,Pitch,Roll,xtra
2022-03-31 21:38:30,0.000000, 0.000000,-0.260261,0.93
2022-03-31 21:54:48,0.098491,-0.000042,-0.259386,0.93
2022-03-31 21:54:53,0.196983,-0.000086,-0.249085,0.93
2022-03-31 21:54:59,0.295475,-0.000117,-0.243554,0.92
2022-03-31 21:55:04,0.393967,-0.000172,-0.246343,0.92''')
df = pd.read_csv(sim_csv)
print(df)
Timestamp AlongTrack Pitch Roll xtra
0 2022-03-31 21:38:30 0.000000 0.000000 -0.260261 0.93
1 2022-03-31 21:54:48 0.098491 -0.000042 -0.259386 0.93
2 2022-03-31 21:54:53 0.196983 -0.000086 -0.249085 0.93
3 2022-03-31 21:54:59 0.295475 -0.000117 -0.243554 0.92
4 2022-03-31 21:55:04 0.393967 -0.000172 -0.246343 0.92
看起来逻辑是,如果CSV是一个列标题短,那么假定第一列是一个未命名的索引列。
解决这个问题的一种方法是用您想要的列名手动指定names=
,包括缺少的那个列名。然后使用skiprows=
跳过报头到数据。
只需添加以下代码行:
df = pd.read_csv(sim_csv)
df = df.set_index(df.columns[0]).reset_index()
df
结果:
算出来了,傻问题。CSV文件在标题行之后只有一个回车。添加一个列可以修复它,或者使用代码:
df = pd.read_csv(file, header=6, index_col=False)
标记为false将使用标准索引结束,然后我可以将索引设置为时间戳列。谢谢!