繁体   English   中英

移位熊猫数据框的参差不齐的行以使用部分字符串搜索来清理数据

[英]Shift ragged rows of Pandas DataFrame to clean data with partial string search

从.csv文件导入数据后,我有一些看起来与此类似的数据(尽管要排序几百列和几千行):

         4        5        6      7       8       9        10     11    12      13         14         15   16
0   302255Z  09005KT        1  1/4SM      BR     CLR  M00/M00  A3044   RMK    AO2A     SLP311  T10021002   $;
1   302232Z  08003KT        1    1/4      BR     CLR  M00/M00  A3044   RMK    AO2A     SLP310         $;  NaN
2   302225Z  09005KT        1  1/2SM      BR     CLR  M00/M00  A3044   RMK    AO2A     SLP309         $;  NaN
3   302155Z  08003KT        2  1/2SM      BR     CLR  M00/M00  A3043   RMK    AO2A     SLP306  T10001000   $;
4   302055Z  09004KT      3SM     BR     CLR   00/00    A3042    RMK  AO2A  SLP304  T00020002      56001   $;
5   301955Z  00000KT      3SM     BR     CLR   01/01    A3042    RMK  AO2A  SLP304  T00080008         $;  NaN
6   301855Z  09006KT      3SM     BR  FEW055   01/01    A3042    RMK  AO2A  SLP303  T00110011         $;  NaN
7   301655Z  10004KT        2  1/2SM      BR  FEW050  M00/M00  A3041   RMK    AO2A     SLP301  T10031003   $;
8   301610Z  09004KT        2  1/2SM      BR     CLR    00/00  A3041   RMK    AO2A     SLP301         $;  NaN
9   301555Z     AUTO  08005KT   4800      BR     CLR    01/01  A3041   RMK     AO2     SLP300  T00070007   $;
10  301509Z     AUTO  06003KT   4800      BR     CLR    01/01  A3041   RMK     AO2     SLP300         $;  NaN
11  301449Z     AUTO  10003KT   4000      BR     CLR    01/01  A3041   RMK     AO2     SLP300         $;  NaN
12  301355Z     AUTO  07004KT   6000      BR     CLR    02/02  A3041   RMK     AO2     SLP300  T00230023   $;
13  301255Z     AUTO  07003KT   6000      BR     CLR    02/02  A3041   RMK     AO2     SLP299  T00200020   $;
14  301055Z     AUTO  00000KT   9000      BR     CLR    04/04  A3040   RMK     AO2     SLP298  T00360036   $;

我放弃了尝试转移所有内容以正确匹配的方法。 取而代之的是,我尝试创建一个新列,该列结合了第5和第6列中以KT结尾的值的条目。 我正在为从T开始的那些值创建第二个新列。

首先,我尝试在第5行和第6行中拉出所有满足我的条件的数据,如下所示:

df1=df[df[5].str.contains("KT")].iloc[:,[0,5]]
df2=df[df[6].str.contains("KT")].iloc[:,[0,6]]

.iloc值是尝试将结果合并在一起。 必须有一种轻松的方法来格式化该格式。 有什么想法吗?

如果有帮助,这里有一个更简单的数据集:

row1=['a','b','c1K','d','e','foo','foo','f1111T','g','$']
row2=['a','b','foo','c2K','d','e','f4321T','g','$','$']
row3=['a','b','c3K','d','e','f1234T','g','$']
df=ps.DataFrame(zip(row1,row2,row3)).T
df1=df[df[2].str.contains("K")].iloc[:,[0,2]]
df2=df[df[3].str.contains("K")].iloc[:,[0,3]]

尝试ps.concat([df1,df2],axis = 0,join ='outer')并没有给出我想要的东西

   0    2    3
0  a  c1K  NaN
2  a  c3K  NaN
1  a  NaN  c2K

像这样的东西会更漂亮:

      0   
1  a  c1K  
2  a  c3K 
3  a  c2K

可以一次完成以下操作(使用loc因为iloc不允许布尔掩码):

df1 = df[df[5].str.contains("KT")].iloc[:,[0,5]]

df1 = df.loc[df[5].str.contains("KT"), [0, 5]]

为了获得最终结果,您可以将它们合并为一个系列(以避免对齐列),或者在确认之前将列的名称更改为更具描述性:

df1.columns = ['letter', 'code']
df2.columns = ['letter', 'code']
pd.concat([df1, df2], axis=0, ignore_index=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM