如何从下面给出的数据描述中获取pandas.DataFrame的列名

时间:2018-10-23 00:16:37

标签: regex python-3.x string pandas

每个列名都以冒号结尾,下一个列名以换行符开头,前一行以句号结尾,因此应该有一种方法可以从字符串中获取列名列表

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 :(得分:1)

您的帖子标题说,从下面获取pandas.DataFrame的列名,在您的解释中我看不到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']

答案 1 :(得分:0)

尝试一下:

>>> Columns = [i.split(':')[0] for i in data_description.split() if ':' in i]
>>> Columns
['age', 'workclass', 'fnlwgt', 'education', 'education-num']

答案 2 :(得分:0)

使用正则表达式在捕获圆括号之前捕获无空格(\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']

答案 3 :(得分:0)

我将首先删除所有使用该字符串导入的\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之类的方法来获得所需的内容。

答案 4 :(得分:0)

这是一个简单的单线纸。

print([every_line.split(':')[0] for every_line in data_description.split('\n')])