我正在从csv文件导入数据,我想将列“ topThemes”拆分为具有两列的数组/数据框。
在第一列中,我想要主题的名称(例如生物学),在第二列中,我想要其相关的分数(例如62)。
当我导入列时,它以以下格式存储:
Biology: 62\n
Economics: 12\n
Physics: 4\n
Chemistry: 8\n
and so on.
我当前的代码和错误如下所示。
代码:
df = pd.read_csv(r'myfilelocation')
split = [line.split(': ') for line in df['topThemes'].split('\n')]
错误:
AttributeError("'Series' object has no attribute 'split'")
正在导入CSV文件:
我希望它的外观:
感谢您的帮助/回复。
答案 0 :(得分:1)
使用sep
函数的names
指定分隔符,并使用read_csv()
指定列名称:
df = pd.read_csv(r'myfilelocation', sep=':', names=['topThemes', 'score'])
此处的文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
哦,我现在看到您的源CSV文件...
可能有一种更简洁的方法可以减少步骤,但是我认为这会产生您要求的输出:
data = pd.read_csv(r'myfilelocation', usecols=['topThemes'])
data = pd.DataFrame(data['topThemes'].str.split('\n').values.tolist()).stack().to_frame(name='raw')
df = pd.DataFrame()
df[['topTheme', 'score']] = data['raw'].apply(lambda x: pd.Series(str(x).split(":")))
df.dropna(inplace=True)