使用Python从数据框中删除索引

时间:2019-05-16 09:46:15

标签: python-3.x pandas dataframe

我正在尝试使用以下代码从字符串创建Pandas数据框-

import pandas as pd

input_string="""A;B;C
0;34;88
2;45;200
3;47;65
4;32;140
"""

data = input_string
df = pd.DataFrame([x.split(';') for x in data.split('\n')])
print(df)

我得到以下结果-

    0     1     2
 0  A     B     C
 1  0    34    88
 2  2    45   200
 3  3    47    65
 4  4    32   140
 5     None  None

但是我需要以下内容-

 A     B     C
 0    34    88
 2    45   200
 3    47    65
 4    32   140

我在创建数据框时添加了“ index = False”-

df = pd.DataFrame([x.split(';') for x in data.split('\n')],index = False)

但是,这给了我一个错误-

TypeError: Index(...) must be called with a collection of some kind, False 
was passed

这是如何实现的?

2 个答案:

答案 0 :(得分:1)

read_csvStringIOindex_col参数一起用于将第一列设置为index

input_string="""A;B;C
0;34;88
2;45;200
3;47;65
4;32;140
"""

df = pd.read_csv(pd.compat.StringIO(input_string),sep=';', index_col=0)
print (df)
    B    C
A         
0  34   88
2  45  200
3  47   65
4  32  140

您的解决方案应更改为使用默认参数split(任意空格),将列表的所有值传递给DataFrame,而无需首先使用column参数,如果需要将第一列索引添加DataFrame.set_axis

L = [x.split(';') for x in input_string.split()]
df = pd.DataFrame(L[1:], columns=L[0]).set_index('A')
print (df)
    B    C
A         
0  34   88
2  45  200
3  47   65
4  32  140

对于一般解决方案,请使用set_index中第一个列表的第一个值:

L = [x.split(';') for x in input_string.split()]
df = pd.DataFrame(L[1:], columns=L[0]).set_index(L[0][0])

编辑:

您可以将列名而不是索引名设置为A值:

df = df.rename_axis(df.index.name, axis=1).rename_axis(None)
print (df)
A   B    C
0  34   88
2  45  200
3  47   65
4  32  140

答案 1 :(得分:0)

import pandas as pd

input_string="""A;B;C 
0;34;88
2;45;200
3;47;65
4;32;140
"""

data = input_string
df = pd.DataFrame([x.split(';') for x in data.split()])
df.columns = df.iloc[0]
df = df.iloc[1:].rename_axis(None, axis=1)
df.set_index('A',inplace = True)
df

输出

    B   C
A       
0   34  88
2   45  200
3   47  65
4   32  140