【发布时间】:2021-02-08 11:38:56
【问题描述】:
所以现在我有一个 csv,数据看起来像这样
email='abc@cde.com' AID=100200 PID=2500 NID=3950
email='def@ghk.com' AID=357156 PID=3544 NID=2688
email='testing@edu.uk' AID=385746 PID=6709 NID=2433
....
我想把这个系列拆分成一个数据框,最终表格如下:
email AID PID NID
abc@cde.com 100200 2500 3950
def@ghk.com 357156 3544 2688
testing@edu.uk 385746 6709 2433
也就是说,我想要的如下:
- 首先将系列分成 4 个,分隔符为 ' '
- 然后使用分隔符“=”进一步拆分新数据框中的所有系列
- 最后形成表格。第一部分 shd 是列名,第二部分 shd 保留为值
我所做的是:
# Assume the df as newdf
import pandas as pd
excel_test = pd.read_csv('filename')
newdf = excel_test.iloc[:,1].str.split(' ', expand=True)
for x in range(1, len(newdf.columns) -1):
newdf.iloc[:,x] = newdf.iloc[:,x].str.split('=', expand=True)[1]
new_column_name = newdf.iloc[:,x].str.split('=', expand=True)[0]
newdf.rename(columns={newdf.columns[x]: new_column_name}, inplace=True)
print(newdf)
在这个脚本中,我得到了值,但是,我得到了一个错误:
TypeError: 'Series' 对象是可变的,因此它们不能被散列
当我也尝试更改列名时
那么问题来了:
- 在这种情况下如何同时更改列名?
- 我有一种感觉,for循环可以换成类似str的函数,这样可以让代码更干净,更有条理。有没有其他方法可以做到这一点?
感谢您的帮助!
【问题讨论】: