我正在尝试使用以下代码从字符串创建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
这是如何实现的?
答案 0 :(得分:1)
将read_csv
与StringIO
和index_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