【发布时间】:2020-08-09 04:12:46
【问题描述】:
我有两个 CSV 文件,我想将一行(循环通过 n 行)中的一对(一组两个)相同类型的 int 值与第二个 CSV 文件中的匹配值匹配,在一个由重复的相同类型的值组成的列。
到目前为止,我写了这段代码,但是非常耗时,也许有解决这个问题的pythonic捷径?
c1=0
c2=0
def append_list_as_row(file_name, list_of_elem):
# Open file in append mode
with open(file_name, 'a+', newline='') as write_obj:
# Create a writer object from csv module
csv_writer = writer(write_obj)
# Add contents of list as last row in the csv file
csv_writer.writerow(list_of_elem)
pairs = pd.read_csv('pairs.csv',delimiter=';')
df = pd.read_csv('02_Data_test.csv',delimiter=',')
foo = open('foo.csv', 'w')
with open('foo.csv', 'w', newline='') as outcsv:
writer1 = csv.DictWriter(outcsv, fieldnames = ["##","lac","cid","msisdn","imei","event_type","tstamp","long","lat","max_dist","cell_type","start_angle","end_angle","msisdn1"])
writer1.writeheader()
for i in range(0,122,1): #range(len(pairs)):
for j in range(0,174123,1): #range(len(df)):
if pairs.iloc[i,0]==df.iloc[j,3]:
c1+=1
print(i)
append_list_as_row('foo.csv', df.iloc[j,:])
if pairs.iloc[i,1]==df.iloc[j,3]:
c2+=1
print(i)
print(j)
print("")
append_list_as_row('foo.csv', df.iloc[j,:])
#if pairs.iloc[i,1]==df.iloc[j,3]:
# c2+=1
# print(i)
# print(j)
#append_list_as_row('foo.csv', df.iloc[j,:])
print("------------------------")
append_list_as_row('foo.csv', "")
【问题讨论】:
-
您能否在您的问题中添加示例输入/输出?
-
输入:来自 1 个 CSV 的一对,第 1 行 158530063945;158528861599 并将这两个数字从 2 个大 CSV 的一列中匹配以检索相应/伴随数据,例如输出:##,lac,cid, msisdn,imei,event_type,tstamp,long,lat,max_dist,cell_type,start_angle,end_angle,msisdn1 (header) 和 row1 7471,7717,31137,158530063945,867007010117890.0,0,1369278960506,37.5842,55.OR,6107,DO. 150.0,158530063945 和第 2 行 7395,7717,31137,158528861599,12439009133970.0,0,1369278754613,37.5842,55.6137,1349,OUTDOOR,90.0,1580.0,158592
-
好的。所以你有两个 CSV 文件,它们的标题完全相同。您正在尝试同时访问它们,以使用“msisdn”列检索数据。我说的对吗?
-
或者,您是否有 2 个 CSV 文件,其中一个包含这些“msisdn”对,另一个包含“##,lac,cid,msisdn,imei,event_type,tstamp,long,lat, max_dist,cell_type,start_angle,end_angle,msisdn1" 这些标题?
-
标头不同,只有一个共同标头“msisdn”。在第一个 CSV 中,有两个“msisdn”列包含属于同一个人的 N 个手机号码对,第二个 CSV 仅包含一个“msisdn”列,其中许多实例使用地理位置/塔所建议的这些号码。