每个列名都以冒号结尾,下一个列名以换行符开头,前一行以句号结尾,因此应该有一种方法可以从字符串中获取列名列表
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']
答案 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')])