Pandas:选择仅包含字符串的行?

时间:2018-05-18 15:53:12

标签: python pandas

我有一个如下所示的数据框:

    [Column1]   [Column2]
0   16155.22300 1.246982
1   16193.009   BMS1P17,BMS1P18,BMS1P22,DUXAP8
2   16231.289   LINC01297
5   16265.05300 2.156268
6   16287.937   POTEH,POTEH-AS1
7   16288.53800 2.156268
10  17645.92500 44.765792
11  17646.335   HDHD5,HDHD5-AS1
12  17646.44400 44.765792
15  18073.59200 103.154877
16  18073.656   LOC101929372,SLC25A18
17  18073.84300 103.154877

我想制作仅包含column2字符串的列表。我对此的解决方案是这样的:

my_list=list(i for i in ndf['LDU'] if isinstance(i, basestring))

由于某种原因,它不起作用,它返回所有值。任何建议都非常感谢!

3 个答案:

答案 0 :(得分:5)

您可以使用:

df['Column2'].loc[pd.to_numeric(df['Column2'], errors='coerce').isnull()]

或者如果你想要它在列表中。

list(df['Column2'].loc[pd.to_numeric(df['Column2'], errors='coerce').isnull()])

答案 1 :(得分:3)

您可以使用:

def checker(txt):
    try:
        float(txt)
        return False
    except:
        return True

df[df['[Column2]'].apply(checker)]
#    [Column1]                       [Column2]
#1   16193.009  BMS1P17,BMS1P18,BMS1P22,DUXAP8
#2   16231.289                       LINC01297
#6   16287.937                 POTEH,POTEH-AS1
#11  17646.335                 HDHD5,HDHD5-AS1
#16  18073.656           LOC101929372,SLC25A18

答案 2 :(得分:2)

这是一个快速解决方案:

import pandas as pd
df = pd.DataFrame({"a":[2,3,4], "b":["string",2,'m']})

my_list = []
for index, row in df["b"].iteritems(): #change b to your col name
    if type(row) == str:
        my_list.append(row)
print(my_list)

输出:['字符串',' m']