如何删除项目数量少于一定数量或有Pandas叮咬的行?

2024-05-23 16:47:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我找了很多东西,但找不到解决这个特殊案件的办法。要删除的行数少于3行的字符串。我的问题将在下一步得到更明确的解决。在

我正在准备一个LDA主题建模,用pandas中的一个大型瑞典数据库,并将测试用例限制为1000行。我只关注一个特定的专栏,到目前为止,我的方法如下:

con = sqlite3.connect('/Users/mo/EXP/NAV/afm.db')
sql = """
select * from stillinger limit 1000
"""
dfs = pd.read_sql(sql, con)

plb = """
select PLATSBESKRIVNING from stillinger limit 1000
"""
dfp = pd.read_sql(plb, con);dfp

然后我定义了一个正则表达式,其中第一个参数删除所有元字符,同时保留瑞典语和挪威语特定的字母。第二个参数删除单词<;3:

^{pr2}$

创建熊猫系列:

s0 = p0['PLATSBESKRIVNING'] 

那么:

ts = s0.str.lower().str.split();ts

0      [medrek, rekrytering, söker, uppdrag, manpower...
1      [familj, barn, tjejer, kille, söker, pair, vil...
2      [uppgift, blir, tillsammans, medarbetare, leda...
3      [behov, operasjonssykepleiere, langtidsoppdrag...
4      [detta, perfekta, jobbet, arbetstiderna, varda...
5      [familj, paris, barn, söker, älskar, barn, vil...
6      [alla, inom, cafe, restaurang, förekommande, a...
7      [diskare, till, cafe, dubbel, sökes, arbetet, ...
8      [diskare, till, thelins, konditori, sökes, arb...

从数据库中删除停止字:

r = s0.str.split().apply(lambda x: [item for item in x if item not in mswl]);r

0      [uppdrag, bemanningsföretag, erbjuds, tillägg,...
1      [föräldrarna, citycentre, stort, tomt, mamman,...
2      [utveckla, övergripande, strategiska, frågor, ...
3                   [erfaring, sykepleier, legitimasjon]
4      [arbetstiderna, vardagar, härliga, människor, ...
5      [paris, utav, badrum, båda, yngsta, endast, fö...
6                       [förekommande, emot, utbildning]
7                                                     []
8                                              [thelins]
9      [paris, baby, månader, våning, delar, badrum, ...

创建新的数据帧并删除空括号:

dr = pd.DataFrame(r)
dr0 = dr[dr.astype(str)['PLATSBESKRIVNING'] != '[]'].reset_index(drop=True); dr0

PLATSBESKRIVNING
0   [uppdrag, bemanningsföretag, erbjuds, tillägg,...
1   [föräldrarna, citycentre, stort, tomt, mamman,...
2   [utveckla, övergripande, strategiska, frågor, ...
3   [erfaring, sykepleier, legitimasjon]
4   [arbetstiderna, vardagar, härliga, människor, ...
5   [paris, utav, badrum, båda, yngsta, endast, fö...
6   [förekommande, emot, utbildning]
7   [thelins]
8   [paris, baby, månader, våning, delar, badrum, ...

维护字符串:

dr1 = dr0['PLATSBESKRIVNING'].apply(str);  len(dr1),type(dr1), dr1

0      ['uppdrag', 'bemanningsföretag', 'erbjuds', 't...
1      ['föräldrarna', 'citycentre', 'stort', 'tomt',...
2      ['utveckla', 'övergripande', 'strategiska', 'f...
3             ['erfaring', 'sykepleier', 'legitimasjon']
4      ['arbetstiderna', 'vardagar', 'härliga', 'männ...
5      ['paris', 'utav', 'badrum', 'båda', 'yngsta', ...
6                 ['förekommande', 'emot', 'utbildning']
7                                            ['thelins']
8      ['paris', 'baby', 'månader', 'våning', 'delar'...

我现在的问题是要删除列表中包含少于3个字符串的任何行,例如第3、6和7行。预期结果如下:

0      ['uppdrag', 'bemanningsföretag', 'erbjuds', 't...
1      ['föräldrarna', 'citycentre', 'stort', 'tomt',...
2      ['utveckla', 'övergripande', 'strategiska', 'f...
3      ['arbetstiderna', 'vardagar', 'härliga', 'männ...
4      ['paris', 'utav', 'badrum', 'båda', 'yngsta', ...
5      ['paris', 'baby', 'månader', 'våning', 'delar'...
.
.

我怎样才能得到这个?我也在想,这是否可以用一种更简洁的方式来完成?我的方法似乎又笨又笨重。在

我还想删除LDA主题建模的索引和列名,这样我就可以把它写入一个没有索引头和数字的文本文件。我试过:

dr1.to_csv('LDA1.txt',header=None,index=False)

但这会用引号“['word1','word2','t。。]“到文件中的每个字符串列表。在

如有任何建议,将不胜感激。在

谨致问候 Mo公司


Tags: 字符串sqlparisstrtillretagdr1badrum
2条回答

您可以使用apply len,然后选择数据将其存储在您喜欢的dataframe变量中,即

df[df['PLATSBESKRIVNING'].apply(len)>3]

输出:

^{pr2}$

只需测量列表中的项目数并筛选长度小于3的行

dr0['length'] = dr0['PLATSBESKRIVNING'].apply(lambda x: len(x))
cond = dr0['length'] > 3
dr0 = dr0[cond]

相关问题 更多 >