我的CSV文件在前两行中有我想用作列名的名称,前两列用作行名。所以,文件看起来像这样:
tp,desc,L,L,D,D
,,1,2,3,4
3001, foo, 23.1, 35.3, 52.0, 11.9
3010, bar, 31.l, 25.9, 13.9, 134.8
我能够将前两列设置为索引,但我仍然坚持让前两行被接受为列名
这是我到目前为止的输入声明:
df = pd.read_csv("file.csv", index_col=[tp,desc])
感谢。
答案 0 :(得分:0)
尝试使用index_col
指定“索引”列,并解码您必须能够读取的数据。
from io import StringIO
import pandas as pd
data="tp,desc,L,L,D,D\n,,1,2,3,4\n3001, foo, 23.1, 35.3, 52.0, 11.9\n3010, bar, 31.l, 25.9, 13.9, 134.8"
df= pd.read_csv(StringIO(data.decode('UTF-8')),sep=',', index_col=[0,1])
print df
输出:
L L.1 D D.1
tp desc
NaN NaN 1 2.0 3.0 4.0
3001 foo 23.1 35.3 52.0 11.9
3010 bar 31.l 25.9 13.9 134.8
尝试读取文件并以这种方式进行转换。有不同的解决方案here。但通常这可以解决问题。
with open('example.csv', 'rb') as f:
csv = f.read().decode("utf-8")
答案 1 :(得分:0)
可能是你可以尝试:
import pandas as pd
df = pd.read_csv('file.csv', header=None)
# getting names for columns and index:
cnames = zip(df.iloc[0,2:], df.iloc[1,2:])
inames = list(df.iloc[0,:2])
#drop the rows with column names (for columns and index)
df.drop([0,1],axis=0,inplace=True)
#set the indexes
df.set_index([0,1],inplace=True)
# set the names for columns and indexes
df.columns = pd.MultiIndex.from_tuples(cnames)
df.index.names = inames
结果是:
L D
1 2 3 4
tp desc
3001 foo 23.1 35.3 52.0 11.9
3010 bar 31.l 25.9 13.9 134.8
我使用了以下文件内容:
tp,desc,L,L,D,D
,,1,2,3,4
3001, foo, 23.1, 35.3, 52.0, 11.9
3010, bar, 31.l, 25.9, 13.9, 134.8