从pandas datafram中的每个单元格中删除列表

2024-09-29 06:22:06 发布

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

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

我想删除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

Tags: 数据字符串nameevent列表dataraw数字
2条回答

使用,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

如果你想要的输出是空的,更新列表。在

^{pr2}$

我更喜欢@JohnGalt的答案。。。但是

dfRaw.update(dfRaw.DrillDate[dfRaw.DrillDate.apply(type) == list].str[0])
dfRaw.update(dfRaw.Name.str[0])

dfRaw

  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

相关问题 更多 >