Как получить имена столбцов панд. DataFrame из приведенного ниже описания данных - PullRequest
0 голосов
/ 23 октября 2018

Имя каждого столбца заканчивается двоеточием, а имя следующего столбца начинается с новой строки, а предыдущая строка заканчивается точкой полного пробела, поэтому должен быть способ получить список имен столбцов из строки

data_description = '''age: continuous.
workclass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov.
fnlwgt: continuous.
education: Bachelors, Some-college, 11th, HS-grad, Prof-school.
education-num: continuous.'''

Как получить приведенный ниже вывод

Columns = ['age','workclass','fnlwgt','education','education-num']

Ответы [ 5 ]

0 голосов
/ 23 октября 2018

Это простой однострочник.

print([every_line.split(':')[0] for every_line in data_description.split('\n')])
0 голосов
/ 23 октября 2018

Заголовок вашего сообщения гласит: получите имена столбцов панд. Рамка данных снизу , и я не вижу pandas код, написанный где-либо в вашем объяснении.

Вы можетесделать это очень легко через pandas:

Сначала создайте свой dictionary следующим образом:

data_description = {'age': ['continuous.'],
'workclass': ['Private, Self-emp-not-inc, Self-emp-inc, Federal-gov.'],
'fnlwgt': ['continuous.'],
'education':[ 'Bachelors, Some-college, 11th, HS-grad, Prof-school.'],
'education-num': ['continuous.']}

Затем создайте dataframe, используя выше dict

df = pd.DataFrame(data_description)

Тогда просто скажите, list(df.columns), и он выдаст вам все имена столбцов в списке.

In [1009]: list(df.columns)
Out[1009]: ['age', 'education', 'education-num', 'fnlwgt', 'workclass']
0 голосов
/ 23 октября 2018

Используя регулярные выражения, захватывайте без пробелов символы (\S) перед тем, как использовать круглые скобки для захвата.\ S означает противоположность пространства.:.В этом случае вы можете просто сделать:

import re 

re.findall(r'(\S+):',data_description)
 ['age', 'workclass', 'fnlwgt', 'education', 'education-num']

, если вам нужно принять во внимание \n, возможно, потому, что в данных могут быть некоторые данные, которые не являются именами столбцов, но потом следуют двоеточие:

re.findall(r'(?:^|\n)(\S+):',data_description)
 ['age', 'workclass', 'fnlwgt', 'education', 'education-num']
0 голосов
/ 23 октября 2018

Сначала я удалил бы все \n, импортированные со строкой, а затем применил некоторые методы split() и filter(), например:

data_description = data_description.replace("\n", "")
columns = [i.split(":")[0] for i in  list(filter(None, data_description.split(".")))]

Теперь вы получите имя каждогостолбец:

columns
['age', 'workclass', 'fnlwgt', 'education', 'education-num']

Нет общего правила.В каждом случае вы должны подумать, как удалить начальные и конечные пробелы, и попробовать использовать такие методы, как split, таким образом, чтобы вы получили то, что вам нужно.

0 голосов
/ 23 октября 2018

Попробуйте это:

>>> Columns = [i.split(':')[0] for i in data_description.split() if ':' in i]
>>> Columns
['age', 'workclass', 'fnlwgt', 'education', 'education-num']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...