python - 从 Pandas 数据框中的每个单元格中删除列表

标签 python list pandas dataframe

我有一个数据框,其中包含许多单独单元格中的列表。有些单元格没有列表,只是字符串,有些只是整数或数字。

我想删除数据框中的所有列表(当然保留列表中的值或字符串)。我该怎么做?

下面是两个数据框,一个是“原始数据”,其中包含列表、数字和字符串。第二个是我希望创建的干净数据。

执行此操作最简单、最有效的方法是什么?

import pandas as pd

#create two dataframes, one called raw, one called end result
#raw data
raw_data = {'Name': [['W1'], ['W3'], ['W2'], ['W1'], ['W2'],['W3'],['G1']],
            'EVENT':['E1', 'E2', 'E3', 'E4', 'E5','E6','E1'],
        'DrillDate': [['01/01/2000'], 23, '04/01/2000', ['05/15/2000'], [''],[''],'02/02/2000']}
dfRaw = pd.DataFrame(raw_data, columns = ['Name','EVENT','DrillDate'])
dfRaw


# cleaned data
clean_data = {'Name': ['W1', 'W3', 'W2', 'W1', 'W2','W3','G1'],
            'EVENT':['E1', 'E2', 'E3', 'E4', 'E5','E6','E1'],
        'DrillDate': ['01/01/2000', 23, '04/01/2000', '05/15/2000', '','','02/02/2000']}
dfEndResult = pd.DataFrame(clean_data, columns = ['Name','EVENT','DrillDate'])
dfEndResult

最佳答案

使用 applymap 并在单元格值上使用 isinstance 检查类型。

In [666]: dfRaw.applymap(lambda x: x[0] if isinstance(x, list) else x)
Out[666]:
  Name EVENT   DrillDate
0   W1    E1  01/01/2000
1   W3    E2          23
2   W2    E3  04/01/2000
3   W1    E4  05/15/2000
4   W2    E5
5   W3    E6
6   G1    E1  02/02/2000

更新,如果您有空列表并希望输出空白字符串。

In [689]: dfRaw.applymap(lambda x: x if not isinstance(x, list) else x[0] if len(x) else '')
Out[689]:
  Name EVENT   DrillDate
0   W1    E1  01/01/2000
1   W3    E2          23
2   W2    E3  04/01/2000
3   W1    E4  05/15/2000
4   W2    E5
5   W3    E6
6   G1    E1  02/02/2000

关于python - 从 Pandas 数据框中的每个单元格中删除列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45086985/

相关文章:

python - 使用 Flask 从静态之外的目录提供文件

python - 检查列表的n个成员是否在python中的另一个列表中

python - 如何删除 pandas 数据框中重复的行?

python - 如何解决 KeyError(f"None of [{key}] are in the [{axis_name}]") 在这种情况下(Pandas)?

python - 使用 kwd 'sheetname=None' 时 pandas 出错

python - Pandas 自条件以来的行数

python - 我的 Python 脚本能否区分它是以 root 身份运行还是通过 sudo 运行?

algorithm - 查找所有集不包含任何子集

python - 从 Python 列表中去除字符

javascript - 使用 Lodash/Javascript 过滤嵌套数组