我有一个带有列的数据框,其中包含两个不同的列值及其名称,如下所示:
如何将其转换为单独的列?
到目前为止,我尝试了以下操作:
df[col].apply(pd.Series)
-由于列中的数据不是字典格式,因此无法使用。";"
)分隔列,但这不是一个好主意,因为基于响应,给定的数据帧可能具有n个列。 编辑: 纯文本格式的数据:
d = {'ClusterName': ['Date:20191010;Bucket:All','Date:20191010;Bucket:some','Date:20191010;Bucket:All']}
答案 0 :(得分:1)
怎么样:
df2 = (df["ClusterName"]
.str.replace("Date:", "")
.str.replace("Bucket:", "")
.str.split(";", expand=True))
df2.columns = ["Date", "Bucket"]
编辑:
无需对变量名进行硬编码,这是一个快速的技巧。您可以清理它(并减少愚蠢的变量名):
df_temp = df.ClusterName.str.split(";", expand=True)
cols = []
for col in df_temp:
df_temptemp = df_temp[col].str.split(":", expand=True)
df_temp[col] = df_temptemp[1]
cols.append(df_temptemp.iloc[0, 0])
df_temp.columns = cols
答案 1 :(得分:0)
所以..也许是这样...
设置数据框
d = {'ClusterName': ['Date:20191010;Bucket:All','Date:20191010;Bucket:some','Date:20191010;Bucket:All']}
df = pd.DataFrame(data=d)
df
通过冒号和分号对数据框进行解析
ls = []
for index, row in df.iterrows():
splits = row['ClusterName'].split(';')
print(splits[0].split(':')[1],splits[1].split(':')[1])
ls.append([splits[0].split(':')[1],splits[1].split(':')[1]])
df = pd.DataFrame(ls, columns =['Date', 'Bucket'])