一、需求说明
Excel 中有些重复的行,比如第一个字段是 id,以这个字段判断行是不是重复的,若是重复的话连接第二个字段,如下面中,保留的应该是:1669 东寮村、揭东区林场
二、直接上代码
之前有朋友建议用 xlrd 操作,然后保存为 Excel 或者 CSV 的话用 openpyxl,我当时试过,很麻烦,就又用回来 dataFrame 了,十几分钟就做出来了。
直接读取的是Excel表格的数据,最终保存为CSV格式或者Excel格式:
import pandas as pd
import csv
excelFile = r'F:\d3\1216\001.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
pmList = df[['ID']].values.T.tolist()[:][0] # 获取ID列的值
pmList = list(set(pmList)) # 排除重复值
sum_list = [['ID', 'ZLDWMC']]
for pm in pmList: # 循环id列的值
temp = []
dfByPM = df.loc[df['ID'] == pm]
temp.append(pm)
for col in dfByPM.columns:
sumValue = ''
if col == 'ZLDWMC':
for index in range(len(dfByPM[col].values)): #dfByPM[col].values里面保存的是ID号重复的第二列的值,并且用list方式保存着
testValues = dfByPM[col].values[index]
if index == (len(dfByPM[col].values)-1):
sumValue = sumValue + testValues # 若是最后一个,则不用逗号连接
else:
sumValue = sumValue + testValues + "," # 若不是最后一个,用逗号连接两个单元格的值
temp.append(sumValue)
sum_list.append(temp)
# 方法一:将 list 保存到 csv 文件中
with open('F:/d3/1216/test.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
for row in sum_list:
writer.writerow(row)
# 方法二:将 list 保存到 excel 表中
output = open('F:/d3/1216/data.xls','w',encoding='gbk')
output.write('ID\tZLDWMC\n')
for i in range(len(sum_list)):
for j in range(len(sum_list[i])):
output.write(str(sum_list[i][j])) #write函数不能写int类型的参数,所以使用str()转化
output.write('\t') #相当于Tab一下,换一个单元格
output.write('\n') #写完一行立马换行
output.close()
# 方法三:将 list 保存到 csv 文件中
name = ['ID', 'ZLDWMC']
test = pd.DataFrame(columns=name, data=sum_list) # 数据有三列,列名分别为one,two,three
print(test)
test.to_csv('F:/d3/潘工/1216/test.csv', encoding='gbk')