bra*_*dog 5 python list dataframe pandas
我有一个数据框,其中包含许多单个单元格中的列表.有些单元格没有列表,只是字符串,有些只是整数或数字.
我想摆脱数据框中的所有列表(保持列表中的值或字符串).我该怎么做?
下面是两个数据帧,一个是"原始数据",其中包含列表,数字和字符串.第二个是我希望创建的干净数据.
这样做最简单,最有效的方法是什么?
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
Run Code Online (Sandbox Code Playgroud)
Zer*_*ero 10
使用,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
Run Code Online (Sandbox Code Playgroud)
更新,如果您已清空列表并希望空白字符串输出.
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2375 次 |
最近记录: |