使用熊猫python重新排列csv中的行值

时间:2018-10-23 09:54:01

标签: python pandas csv data-cleaning

我正在使用熊猫,并且有一个看起来像这样的csv文件

  ID                Name        Store      Price           
Melbourne           
    1               aaaa        bbbb        570
    2               cccc        dddd        236
    3               eeee        ffff        230
Sydney
    1               hhhh        gggg        2300
    2               kkkk        llll        266

我想要它这种形状

City            ID               Name        Store       Price      
Melbourne        1               aaaa        bbbb        570
Melbourne        2               cccc        dddd        236
Melbourne        3               eeee        ffff        230
Sydney           1               hhhh        gggg        23
Sydney           2               kkkk        llll        266

我在想什么
1.添加新列

  ID        New               Name        Store      Price           
Melbourne   NaN  
    1       NaN               aaaa        bbbb        570
    2       NaN               cccc        dddd        236
    3       NaN               eeee        ffff        230
Sydney 
    1       NaN               hhhh        gggg        2300
    2       NaN               kkkk        llll        266
  1. 然后将索引更改为ID。所以看起来像这样

      ID       New      Name        Store      Price           
     Melbourne NaN  
     1         NaN      aaaa        bbbb        570
     2         NaN      cccc        dddd        236
     3         NaN      eeee        ffff        230
     Sydney    NaN
     1         NaN      hhhh        gggg        2300
     2         NaN      kkkk        llll        266
    
  2. 然后是这样的

      ID         New              Name        Store      Price           
     Melbourne   NaN  
     Melbourne    1               aaaa        bbbb        570
     Melbourne    2               cccc        dddd        236
     Melbourne    3               eeee        ffff        230
     Sydney       NaN
     Sydney       1               hhhh        gggg        2300
     Sydney       2               kkkk        llll        266
    
  3. 最后更改列名并删除没有值的行

    City            ID              Name        Store      Price           
    Melbourne       1               aaaa        bbbb        570
    Melbourne       2               cccc        dddd        236
    Melbourne       3               eeee        ffff        230
    Sydney          1               hhhh        gggg        2300
    Sydney          2               kkkk        llll        266
    

    我不确定它是否可以实现。请给我一些有关如何实现这一点的想法。

1 个答案:

答案 0 :(得分:0)

执行此操作的方法有几种,以下是有关如何实现建议的方法的一些想法。

第1步:

使用str.isalpha()方法检查字符串是否仅包含字母字符:

df["column"].apply(lambda x: x if x.isalpha() else None)

以上将返回Series列中的数值为“无”的ID。您可以将其存储在新列中。

此解决方案假定每个x是一个字符串。


如果您不确定列中的所有数字都是字符串,则可以创建城市列表:

my_cities = ['Melbourne', 'Sydney']

然后检查列中的值是否为城市,并将其存储在布尔值Series中:

is_city = df['column'].isin(my_cities)

应用Series作为掩码,并将值替换为None

df.loc[~is_city, 'column'] = None

(请注意~的意思是“不是”,因此这将返回值“不是城市”的行)。

第2步:

使用ffill方法填充新列:

df["new_column"].fillna(method="ffill")

ffill基本上执行问题的第3步。您可以here来了解它。

第3步:

最后删除所有至少包含一个None的行:

df.dropna()