遍历列表并在 pandas 数据框中查找字符串
Loop through list and find strings in pandas dataframe
我是 python/pandas 新手,遇到以下问题:我有一个名为 'cat' 的列表,其中包含代表类别的 13 个不同字符串。我还有一个名为 'ku_drop' 的数据框,其中包含 10 列 HTML 代码(字符串格式),我想从中提取信息。
现在,我想在数据框中搜索 'cat'-list 的每个字符串,并将包含特定字符串的每个单元格保存在同一列中。 (例如,所有包含字符串 'Arbeitsatmosphäre' 的单元格都应保存在 X1 列中,所有包含 'Kommunikation' 的单元格应保存在 X2 列中,等等。)
我怎样才能做到这一点?我尝试了以下方法,但我只收到一个空数据帧 ...
cat = ['Arbeitsatmosphäre', 'Kommunikation', 'Kollegenzusammenhalt', 'Work-Life-Balance', 'Vorgesetztenverhalten', 'Interessante Aufgaben', 'Gleichberechtigung', 'Umgang mit älteren Kollegen', 'Arbeitsbedingungen', 'Umwelt-/Sozialbewusstsein', 'Gehalt/Sozialleistungen', 'Image', 'Karriere/Weiterbildung']
cat_length = len(cat)
df_appender = []
for i in range(cat_length):
x = "{}".format(category[i] for category in cat)
df_cat = ku_drop[ku_drop.apply(lambda col: col.str.contains(x, case=False), axis=1)].stack().to_frame()
df_cat.columns = ['X[i]']
df_cat = df_cat.dropna(axis=0)
df_appender.append(df_cat)
df_appender
我知道我的代码可能有很多缺陷,请原谅,因为到目前为止我真的不是很熟悉pandas。
尝试:
cat = ['Arbeitsatmosphäre', 'Kommunikation', 'Kollegenzusammenhalt', 'Work-Life-Balance', 'Vorgesetztenverhalten', 'Interessante Aufgaben', 'Gleichberechtigung', 'Umgang mit älteren Kollegen', 'Arbeitsbedingungen', 'Umwelt-/Sozialbewusstsein', 'Gehalt/Sozialleistungen', 'Image', 'Karriere/Weiterbildung']
ku_drop = pd.DataFrame({'c1': ['Arbeitsatmosphäre abc', 'abc', 'Work-Life-Balance abc', 'Arbeitsatmosphäre abc'], 'c2': ['abc', 'abc Vorgesetztenverhalten abc', 'Kommunikation abc abc', 'abc abc Arbeitsatmosphäre']})
df = pd.DataFrame(index= range(len(ku_drop)), columns = cat)
for i, c in enumerate(cat):
used = 0
for j, c2 in enumerate(ku_drop.columns):
temp = ku_drop[ku_drop[c2].str.contains(c)][c2].values
if len(temp)>0:
df.loc[used:used+len(temp)-1,c] = temp
used += len(temp)
输出:
我是 python/pandas 新手,遇到以下问题:我有一个名为 'cat' 的列表,其中包含代表类别的 13 个不同字符串。我还有一个名为 'ku_drop' 的数据框,其中包含 10 列 HTML 代码(字符串格式),我想从中提取信息。 现在,我想在数据框中搜索 'cat'-list 的每个字符串,并将包含特定字符串的每个单元格保存在同一列中。 (例如,所有包含字符串 'Arbeitsatmosphäre' 的单元格都应保存在 X1 列中,所有包含 'Kommunikation' 的单元格应保存在 X2 列中,等等。) 我怎样才能做到这一点?我尝试了以下方法,但我只收到一个空数据帧 ...
cat = ['Arbeitsatmosphäre', 'Kommunikation', 'Kollegenzusammenhalt', 'Work-Life-Balance', 'Vorgesetztenverhalten', 'Interessante Aufgaben', 'Gleichberechtigung', 'Umgang mit älteren Kollegen', 'Arbeitsbedingungen', 'Umwelt-/Sozialbewusstsein', 'Gehalt/Sozialleistungen', 'Image', 'Karriere/Weiterbildung']
cat_length = len(cat)
df_appender = []
for i in range(cat_length):
x = "{}".format(category[i] for category in cat)
df_cat = ku_drop[ku_drop.apply(lambda col: col.str.contains(x, case=False), axis=1)].stack().to_frame()
df_cat.columns = ['X[i]']
df_cat = df_cat.dropna(axis=0)
df_appender.append(df_cat)
df_appender
我知道我的代码可能有很多缺陷,请原谅,因为到目前为止我真的不是很熟悉pandas。
尝试:
cat = ['Arbeitsatmosphäre', 'Kommunikation', 'Kollegenzusammenhalt', 'Work-Life-Balance', 'Vorgesetztenverhalten', 'Interessante Aufgaben', 'Gleichberechtigung', 'Umgang mit älteren Kollegen', 'Arbeitsbedingungen', 'Umwelt-/Sozialbewusstsein', 'Gehalt/Sozialleistungen', 'Image', 'Karriere/Weiterbildung']
ku_drop = pd.DataFrame({'c1': ['Arbeitsatmosphäre abc', 'abc', 'Work-Life-Balance abc', 'Arbeitsatmosphäre abc'], 'c2': ['abc', 'abc Vorgesetztenverhalten abc', 'Kommunikation abc abc', 'abc abc Arbeitsatmosphäre']})
df = pd.DataFrame(index= range(len(ku_drop)), columns = cat)
for i, c in enumerate(cat):
used = 0
for j, c2 in enumerate(ku_drop.columns):
temp = ku_drop[ku_drop[c2].str.contains(c)][c2].values
if len(temp)>0:
df.loc[used:used+len(temp)-1,c] = temp
used += len(temp)
输出: