我正在尝试使用以下代码从字符串创建一个Pandas Dataframe -
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
这是如何实现的?
发布于 2019-05-16 18:04:38
使用带有StringIO
和index_col
parameetr的read_csv
将第一列设置为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
您的解决方案应该使用默认拆分参数(任意空格)进行更改,在不使用first with columns参数的情况下将列表的所有值传递给DataFrame,如果需要将第一列添加到索引,则添加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
https://stackoverflow.com/questions/56165606
复制相似问题