我想从以前生成的csv文件中正确读取未命名的列。你知道吗
csv有一个多索引标题,每个列的形状不同,例如,列0有一个坐标,列1有两个坐标,列2有三个坐标。因此,在读取完整的csv时,未命名的列将出现在第0列和第1列中。 我需要定位具有给定值的行,但无法传递正确的列。你知道吗
想象一下我的.csv'文件如下所示:
C0,C1,C2
,C10,C20
,,C22
-2,0,0.4101
-1,1,0.8058
0,0,0.1000
1,3,0.3846
我试着读一下:
read_df = pd.read_csv('my.csv', header=[0,1,2])
print(read_df)
C0 C1 C2
Unnamed: 0_level_1 C10 C20
Unnamed: 0_level_2 Unnamed: 1_level_2 C22
0 -2 0 0.4101
1 -1 1 0.8058
2 0 0 0.1000
3 1 3 0.3846
我需要选择对应于C0值的行,但结果不是KeyError就是TypeError,如下所示:
read_df.loc( read_df[('C0','','')] == 0 ) ## KeyError: ('C0', '', '')
read_df.loc( read_df[('C0','0_level_1','0_level_2')] == 0 ) ## KeyError: ('C0', '0_level_1', '0_level_2')
read_df.loc( read_df[('C0', 'Unnamed: 0_level_1', 'Unnamed: 0_level_2')] == 0 ) ## TypeError: 'Series' objects are mutable, thus they cannot be hashed
一个转变可能是预先命名列并防止这种情况发生,但最好理解如何管理这种情况。你知道吗
谢谢
PS我是这样生成的'我的.csv'
import pandas as pd
import random as rnd
col_0 = [('C0', '', '')]
col_1 = [('C1', 'C10','')]
col_2 = [('C2', 'C20', 'C22')]
tot_col = columns=pd.MultiIndex.from_tuples(col_0 + col_1 + col_2)
tot_df = pd.DataFrame(columns=tot_col)
def get_data():
data_dict = { ('C1','C10','') : rnd.randint(0,5),
('C2','C20','C22') : '{:2.4f}'.format(rnd.random()) }
data_df = pd.DataFrame( [data_dict], columns=tot_col )
return(data_df)
for ii in range(-2, 2):
ii_df = get_data()
ii_df[('C0','','')] = ii
tot_df = pd.concat([tot_df, ii_df], ignore_index=True)
tot_df.to_csv('my.csv', index=False)
你在找什么
或者只是
结果:
恢复原始索引有点笨拙:
之后,您可以像往常一样使用:
结果:
相关问题 更多 >
编程相关推荐