pandas read_csv解析头作为字符串类型,但我想要整数

时间:2018-03-12 06:40:19

标签: python pandas

例如,csv文件如下所示,(1,2,3)是标题!

1,2,3
0,0,0

我使用pd.read_csv读取csv文件并打印

import pandas as pd
df = pd.read_csv('./test.csv')
print(df[1])

发生错误key error:1

似乎read_csv将标头解析为字符串..

有没有办法在dataframe列中使用整数类型?

4 个答案:

答案 0 :(得分:5)

我认为更为通用的是astype

将列名转换为integer
df = pd.read_csv('./test.csv')
df.columns = df.columns.astype(int)

另一种方法是首先只获取第一列并在read_csv中使用参数names

import csv
with open("file.csv", "r") as f:
    reader = csv.reader(f)
    i = np.array(next(reader)).astype(int)

#another way
#i = pd.read_csv("file.csv", nrows=0).columns.astype(int)
print (i)
[1 2 3]

df = pd.read_csv("file.csv", names=i, skiprows=1)
print (df.columns)
Int64Index([1, 2, 3], dtype='int64')

答案 1 :(得分:2)

使用EditorForskiprows=1跳过标题列。这将自动加载一个数据框,其中整数标头从header=None开始。

0

df = pd.read_csv('test.csv', skiprows=1, header=None).rename(columns=lambda x: x + 1)

df 1 2 3 0 0 0 0 来电是可选的,但如果您希望标题从rename开始,则可以将其保留。

如果您有1,请使用MultiIndex将0 th 级别设置为整数:

set_levels

答案 2 :(得分:2)

您可以将set_axislambdapd.Index.map

结合使用

考虑一个看起来像的csv:

1,1,2,2
a,b,a,b
1,3,5,7
0,2,4,6

阅读它:

df = pd.read_csv('test.csv', header=[0, 1])
df

   1     2   
   a  b  a  b
0  1  3  5  7
1  0  2  4  6

您可以使用第一级中的整数来管道列设置,如:

df.set_axis(df.columns.map(lambda i: (int(i[0]), i[1])), axis=1, inplace=False)

   1     2   
   a  b  a  b
0  1  3  5  7
1  0  2  4  6

答案 3 :(得分:0)

  

在dataframe列中可以使用整数类型吗?

我觉得这很优雅:

<?xml version="1.0" encoding="utf-8"?>                                   
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:innerRadiusRatio="2.5"
  android:shape="ring"
  android:thickness="2dp"
  android:useLevel="true">
<solid android:color="#ff205C" />                                
</shape>

请注意,df = pd.read_csv('test.csv').rename(columns=int) 是内置的函数 int()