Удалить индекс из фрейма данных, используя Python - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать 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

Как это достижимо?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Используйте 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 все значения списков без первого с параметром столбцов и, если необходимо, для индексации первого столбца добавьте 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])

EDIT:

Вы можете установить имя столбца вместо имени индекса на 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
0 голосов
/ 16 мая 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...