python两张csv表,遍历A表中的id字段,如果和B表中的id一致,则把B表id所在行的数据写到新的csv表
时间: 2024-05-07 17:18:57 浏览: 10
可以使用Python的csv模块和pandas库实现该功能。
首先,使用pandas读取两张表格:
```python
import pandas as pd
# 读取A表和B表
df_a = pd.read_csv('A.csv')
df_b = pd.read_csv('B.csv')
```
然后,遍历A表的id字段,如果和B表中的id一致,就把B表id所在行的数据写入到新的csv表中:
```python
# 创建新的csv表格
with open('C.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['id', 'name', 'age', 'gender'])
# 遍历A表的id字段
for a_id in df_a['id']:
# 在B表中查找id一致的行
b_row = df_b.loc[df_b['id'] == a_id]
if not b_row.empty:
# 将b_row的数据写入C表中
writer.writerow(b_row.values.tolist()[0])
```
以上代码中,新的csv表C.csv的字段和B表的字段相同,因此可以直接将b_row的数据写入C表中。如果字段不同,可以根据需要进行字段映射或添加新字段。
相关问题
python:把csv中按照skc添加一列url字段,从另一张csv表中取skc相同时添加,把url字段添加到另一张表
中的相应行,该如何实现?
这个问题可以分为两个部分来实现:
1. 从另一张csv表中取skc相同的url字段。
读取这张表,将skc和url字段存储为字典类型,key为skc,value为url。遍历第一张表中的每一行,如果该行的skc在字典中存在,则添加一个url字段,并将对应的url值赋给该字段。
2. 添加url字段到另一张表中的相应行。
在遍历第一张表时,如果该行的skc在字典中不存在,则可以不做任何操作。如果存在,则可以使用pandas库的merge方法将第二张表与第一张表进行合并,之后就可以使用第一部分的方法将url字段添加到第一张表中了。
代码示例:
```python
import pandas as pd
# 读取第一张表
df1 = pd.read_csv('table1.csv')
# 读取第二张表
df2 = pd.read_csv('table2.csv')
# 将df2转换为字典类型,key为skc,value为url
url_dict = dict(zip(df2['skc'], df2['url']))
# 遍历df1,添加url字段
for i, row in df1.iterrows():
if row['skc'] in url_dict:
df1.at[i, 'url'] = url_dict[row['skc']]
# 将url字段添加到df2中,并保存结果
result = pd.merge(df1, df2, on='skc', how='left')
result.to_csv('result.csv', index=False)
```
因为CSV文件中的表头和我定义的对象字段并不能完全一一对应
如果CSV文件中的表头和你定义的对象字段不能完全一一对应,你可以考虑使用一个字典来映射表头和对象字段之间的关系。具体来说,你可以将表头中的每一列作为字典的键,将对应对象字段的名称作为字典的值。然后在读取CSV文件时,通过表头中的列名来获取对应的对象字段名,这样就可以将CSV文件中的数据正确地映射到对象的属性上了。
以下是一个示例代码,可以帮助你更好地理解这个思路:
``` python
import csv
# 字段映射关系
field_map = {
'csv_column_1': 'object_field_1',
'csv_column_2': 'object_field_2',
'csv_column_3': 'object_field_3',
}
# 读取CSV文件并将数据存储到对象中
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
obj = MyObject()
for csv_field, obj_field in field_map.items():
setattr(obj, obj_field, row[csv_field])
# 对象处理逻辑
...
```
在上面的示例代码中,`field_map` 字典定义了表头中每一列和对象字段之间的映射关系。在读取CSV文件时,我们使用 `csv.DictReader` 对象来读取文件,并将每一行数据存储为一个字典。然后,我们遍历 `field_map` 字典,使用 `setattr` 函数将对应的属性值设置到对象上。最后,我们可以对对象进行处理,完成具体的业务逻辑。