python - 数据框:单元格级别:将逗号分隔的字符串转换为列表
问题描述
我有一个 CSV 文件,其中包含有关驾车旅行的信息。
我想整理这些数据,以便为每个旅程(每一行)提供一个列表。该列表应包含 Journey_code 作为列表中的第一项,然后包含所有后续 MGRS 单元作为单独的项目。最后,我希望将所有这些旅程列表分组到父列表中。
如果我手动执行此操作,它将如下所示:
journeyCodeA = ['journeyCodeA', 'mgrs1', 'mgrs2', 'mgrs3']
journeyCodeB = ['journeyCodeB', 'mgrs2', 'mgrs4', 'mgrs7']
combinedList = [journeyCodeA, journeyCodeB]
到目前为止,这是我为每行创建一个列表并组合所需列的内容。
comparison_journey_mgrs = pd.read_csv(r"journey-mgrs.csv", delimiter = ',')
comparison_journey_mgrs['mgrs_grids'] = comparison_journey_mgrs['mgrs_grids'].str.replace(" ","")
comparison_journey_list = []
for index, rows in comparison_route_mgrs.iterrows():
holding_list = [rows.journey_code, rows.mgrs_grids]
comparison_journey_list.append(holding_list)
问题在于它将 mgrs_grids 列视为单个字符串。
我的列表如下所示:
[['7211863-140','18TWL927129,18TWL888113,18TWL888113,...,18TWL903128']]
但我希望它看起来像这样:
[['7211863-140','18TWL927129', '18TWL888113', '18TWL888113',..., '18TWL903128']]
我正在努力寻找一种方法来遍历数据帧的每一行,引用 mgrs_grids 列,然后将逗号分隔的字符串就地转换为列表。
谢谢你的帮助!
{'driver_code': {0: 7211863, 1: 7211863, 2: 7211863, 3: 7211863},
'journey_code': {0: '7211863-140',
1: '7211863-105',
2: '7211863-50',
3: '7211863-109'},
'mgrs_grids': {0: '18TWL927129,18TWL888113,18TWL888113,18TWL887113,18TWL888113,18TWL887113,18TWL887113,18TWL887113,18TWL903128',
1: '18TWL927129,18TWL939112,18TWL939112,18TWL939113,18TWL939113,18TWL939113,18TWL939113,18TWL939113,18TWL939113,18TWL960111,18TWL960112',
2: '18TWL927129,18TWL889085,18TWL889085,18TWL888085,18TWL888085,18TWL888085,18TWL888085,18TWL888085,18TWL890085',
3: '18TWL927129,18TWL952106,18TWL952106,18TWL952106,18TWL952106,18TWL952106,18TWL952106,18TWL952106,18TWL952105,18TWL951103'}}
解决方案
- 用于
pandas.Series.str.split
将字符串拆分为list
.
# use str split on the column
df.mgrs_grids = df.mgrs_grids.str.split(',')
# display(df)
driver_code journey_code mgrs_grids
0 7211863 7211863-140 [18TWL927129, 18TWL888113, 18TWL888113, 18TWL887113, 18TWL888113, 18TWL887113, 18TWL887113, 18TWL887113, 18TWL903128]
1 7211863 7211863-105 [18TWL927129, 18TWL939112, 18TWL939112, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL960111, 18TWL960112]
2 7211863 7211863-50 [18TWL927129, 18TWL889085, 18TWL889085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL890085]
3 7211863 7211863-109 [18TWL927129, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952105, 18TWL951103]
print(type(df.loc[0, 'mgrs_grids']))
[out]:
list
每个值单独一行
- 创建一列列表后。
- 用于
pandas.DataFrame.explode
为列表中的每个值创建单独的行。
# get a separate row for each value
df = df.explode('mgrs_grids').reset_index(drop=True)
# display(df.hea())
driver_code journey_code mgrs_grids
0 7211863 7211863-140 18TWL927129
1 7211863 7211863-140 18TWL888113
2 7211863 7211863-140 18TWL888113
3 7211863 7211863-140 18TWL887113
4 7211863 7211863-140 18TWL888113
更新
- 这是另一个选项,它将 组合
'journey_code'
到 的前面'mgrs_grids'
,然后将字符串拆分为列表。- 此列表被分配回
'mgrs_grids'
,但也可以分配给新列。
- 此列表被分配回
# add the journey code to mgrs_grids and then split
df.mgrs_grids = (df.journey_code + ',' + df.mgrs_grids).str.split(',')
# display(df.head())
driver_code journey_code mgrs_grids
0 7211863 7211863-140 [7211863-140, 18TWL927129, 18TWL888113, 18TWL888113, 18TWL887113, 18TWL888113, 18TWL887113, 18TWL887113, 18TWL887113, 18TWL903128]
1 7211863 7211863-105 [7211863-105, 18TWL927129, 18TWL939112, 18TWL939112, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL939113, 18TWL960111, 18TWL960112]
2 7211863 7211863-50 [7211863-50, 18TWL927129, 18TWL889085, 18TWL889085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL888085, 18TWL890085]
3 7211863 7211863-109 [7211863-109, 18TWL927129, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952106, 18TWL952105, 18TWL951103]
# output to nested list
df.mgrs_grids.tolist()
[out]:
[['7211863-140', '18TWL927129', '18TWL888113', '18TWL888113', '18TWL887113', '18TWL888113', '18TWL887113', '18TWL887113', '18TWL887113', '18TWL903128'],
['7211863-105', '18TWL927129', '18TWL939112', '18TWL939112', '18TWL939113', '18TWL939113', '18TWL939113', '18TWL939113', '18TWL939113', '18TWL939113', '18TWL960111', '18TWL960112'],
['7211863-50', '18TWL927129', '18TWL889085', '18TWL889085', '18TWL888085', '18TWL888085', '18TWL888085', '18TWL888085', '18TWL888085', '18TWL890085'],
['7211863-109', '18TWL927129', '18TWL952106', '18TWL952106', '18TWL952106', '18TWL952106', '18TWL952106', '18TWL952106', '18TWL952106', '18TWL952105', '18TWL951103']]
推荐阅读
- php - 沙盒 PayPal 批准链接在登录后指向仪表板而不是付款
- dart - 将列表变成给定大小的子列表
- reactjs - 如何验证material ui stepper中的每个表单步骤?
- python - 子图边界外的箱线图
- r - 如何重新排序向量,使其与 R 中另一个向量的顺序相匹配?
- python - pytorch 训练函数变量和张量(阅读我的介绍,我也不知道我的问题,它只是不起作用)
- xml - 忽略空的 xml 标签
- python - TypeError:'dict'和'dict'的实例之间不支持'<':Python 3 Conversion?
- android - 如何禁用 GridView 被 PopupWindow 滚动
- php - Facade\Ignition\Exceptions\ViewException?