Python 3.x 清理数据帧中的数据

Python 3.x 清理数据帧中的数据,python-3.x,pandas,Python 3.x,Pandas,我在熊猫数据框中有类似于以下内容的数据: Address1 listboro:"Manhattan" listprice:1000000 listzip:"10001" Address2 listprice:950000 listzip:"11205" listboro:"Brooklyn" 我想创建一个新的数据帧,如下所示: Address listboro listprice listzip Address1 Manhattan 1000000 10001 Ad

我在熊猫数据框中有类似于以下内容的数据:

Address1 listboro:"Manhattan" listprice:1000000 listzip:"10001"
Address2 listprice:950000     listzip:"11205"   listboro:"Brooklyn"
我想创建一个新的数据帧,如下所示:

Address   listboro   listprice listzip
Address1  Manhattan  1000000   10001
Address2  Brooklyn   950000    11205
原始数据帧存在两个问题:

Address1 listboro:"Manhattan" listprice:1000000 listzip:"10001"
Address2 listprice:950000     listzip:"11205"   listboro:"Brooklyn"
  • 数据位置不一致(不同列中的不同项)
  • 每个数据点前面都有不必要的字符串

  • 我想使用所描述的
    startswith
    方法和所描述的
    extraction
    方法,但数据列不一致的事实让我很反感。

    我不知道如何在不重建新数据帧的情况下对数据帧每行中的值进行排序。方法:对
    numpy
    中的每一行进行排序,将它们构建到一个新的数据框中,并使用
    Series.str.extract
    提取数据字段:

    # Example DataFrame
              0                     1                  2                    3
    0  Address1  listboro:"Manhattan"  listprice:1000000      listzip:"10001"
    1  Address2      listprice:950000    listzip:"11205"  listboro:"Brooklyn"
    
    # Copy values to numpy array, sort each row, and re-build the DataFrame
    a = df.values
    a.sort(axis=1)
    df = pd.DataFrame(a)
    df
              0                     1                  2                3
    0  Address1  listboro:"Manhattan"  listprice:1000000  listzip:"10001"
    1  Address2   listboro:"Brooklyn"   listprice:950000  listzip:"11205"
    
    # Assign names to columns
    df.columns = ['Address', 'listboro', 'listprice', 'listzip']
    
    # Extract data fields
    df['listboro'] = df['listboro'].str.extract('\"(.*)\"')
    df['listprice'] = df['listprice'].str.extract('\:(.*)').astype(int)
    # Do not convert extracted ZIP codes from str to int, because 
    # some ZIP codes start with 0
    df['listzip'] = df['listzip'].str.extract('\"(.*)\"')
    
    df
        Address   listboro          listprice listzip
    0  Address1  Manhattan  listprice:1000000   10001
    1  Address2   Brooklyn   listprice:950000   11205
    

    如果可能的话,请提供数据帧的所有列的实际
    df.head()