Mih*_*rov 5 python dataframe pandas
我有一个表熊猫 DF,它看起来像
| 奴隶 | 起始地址0 | end_addr0 | 起始地址1 | end_addr1 | 起始地址2 | end_addr2 | |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 10000000 | 1FFFFFFF | NaN | NaN | NaN | NaN |
| 1 | 1 | 2000万 | 2007FFFF | 40000000 | 40005FFF | NaN | NaN |
| 2 | 1 | 2000万 | 2007FFFF | 2010万 | 201FFFFF | NaN | NaN |
| 3 | 2 | 2020万 | 202FFFFF | 20080000 | 20085FFF | 40006000 | 400FFFFF |
| 4 | 3 | 0 | 0FFFFFFF | NaN | NaN | NaN | NaN |
| 5 | 4 | 2030万 | 203FFFFF | NaN | NaN | NaN | NaN |
| 6 | 5 | 20400000 | 204FFFFF | NaN | NaN | NaN | NaN |
对于每个从属编号,我需要将其转换为范围列表(元组)。例如,
Slave1_list = ( (20000000, 2007FFFF), (40000000, 40005FFF), (20100000, 201FFFFF))
Run Code Online (Sandbox Code Playgroud)
从站(行)和地址对(列)的数量可以变化。
谢谢
编辑:
运行以下代码将示例数据加载到数据框中:
import pandas as pd
import io
f = io.StringIO('''Slave|start_addr0|end_addr0|start_addr1|end_addr1|start_addr2|end_addr2
0|10000000|1FFFFFFF|NaN|NaN|NaN|NaN
1|20000000|2007FFFF|40000000|40005FFF|NaN|NaN
1|20000000|2007FFFF|20100000|201FFFFF|NaN|NaN
2|20200000|202FFFFF|20080000|20085FFF|40006000|400FFFFF
3|0|0FFFFFFF|NaN|NaN|NaN|NaN
4|20300000|203FFFFF|NaN|NaN|NaN|NaN
5|20400000|204FFFFF|NaN|NaN|NaN|NaN
''')
df = pd.read_csv(f, sep='|', engine='python', index_col=None)
Run Code Online (Sandbox Code Playgroud)
像下面这样:
import pandas as pd
from collections import defaultdict
data = [{'Slave': 1, 'start_addr0': 12, 'end_addr0': 189, 'start_addr1': 9, 'end_addr1': 17},
{'Slave': 1, 'start_addr0': 3, 'end_addr0': 6, 'start_addr1': 1, 'end_addr1': 4},
{'Slave': 3, 'start_addr0': 1, 'end_addr0': 7, 'start_addr1': 2, 'end_addr1': 14}]
df = pd.DataFrame(data)
print(df)
result = defaultdict(list)
rows = df.to_dict(orient='records')
for row in rows:
slave = row.get('Slave')
for key, start_value in row.items():
if key.startswith('start_addr'):
idx = key[-1]
end_value = row.get('end_addr' + idx)
result[slave].append((start_value, end_value))
else:
continue
print('result:')
print(result)
Run Code Online (Sandbox Code Playgroud)
输出
Slave start_addr0 end_addr0 start_addr1 end_addr1
0 1 12 189 9 17
1 1 3 6 1 4
2 3 1 7 2 14
result:
defaultdict(<class 'list'>, {1: [(12, 189), (9, 17), (3, 6), (1, 4)], 3: [(1, 7), (2, 14)]})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |