首页 > 解决方案 > 通过多个分隔符重塑数据和分隔

问题描述

抱歉,我需要一些关于处理 pandas 数据的帮助。我在excel中有一个大数据集。每个单元格包含几天的数据。我已经用 pandas 加载了数据,但我还没有找到一种将数据分成单个单元格的理想方法。格式是“日期”空格破折号空格“值”管道并重复这样 20100205 - 0.10 |

我想分隔单元格,以便我有一个单元格,下面有日期和相应的值。

+-----------+------------------------------------------------------
|   ID      | WBC
+-----------+------------------------------------------------------
|     1     | 20100205 - 0.10 |20100205 - 0.16 |20100205 - 0.21 etc..
+-----------+------------------------------------------------------

Ideal:
+----------+-------------+-------------+------------+
|   ID     |   20100205  |   20100205  |  20100205  |   
+----------+-------------+-------------+------------+
|    1     |     0.10    |    0.16     |    0.21    | 
+----------+-------------+-------------+------------+
from pandas import DataFrame

data = {'ID': ['1'],
        'WBC': ["20100205 - 0.10 |20100205 - 0.16 |20100205 - 0.21 |20100305 - 71.69 |20100306 - 0.27 |20100306 - 0.42 |20100306 - 1.42"]
        }
df = DataFrame (data,columns= ['ID', 'WBC'])

标签: pythonpandas

解决方案


基本思想是解析WBC列中的信息,然后根据需要创建新列:

import pandas as pd

data={'ID': ['1'],
        'WBC': ["20100205 - 0.10 |20100205 - 0.16 |20100205 - 0.21 |20100305 - 71.69 |20100306 - 0.27 |20100306 - 0.42 |20100306 - 1.42"]
        }
df=pd.DataFrame(data, columns= ['ID', 'WBC'])

df["WBC"] = df["WBC"].str.split("|")
dates = [x.split(" - ")[0] for x in df.loc[0, "WBC"]]
vals = [x.split(" - ")[1] for x in df.loc[0, "WBC"]]

for i in range(len(dates)):
    df[int(dates[i])] = float(vals[i])

df.drop("WBC", axis=1, inplace=True)
# df.set_index("ID", inplace=True)    # If you want this as your index

这会给你留下:

df

    ID      20100205     20100305   20100306    20100205    20100305    20100306
0   1           0.21        71.69       1.42        0.21       71.69        1.42

(理想情况下,您的数据框应该有唯一的列名)。


推荐阅读