Python pandas循环输入CSV并合并的问题
如下代码要实现的是输入CSV文件,并合并,显然我的代码【#循环输入新派文件数据并合并】,pandas循环输入时如何合并数据,请指教,谢谢。#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import numpy as np
import pandas as pd
# 声明源数据路径
pathSourceData = "源数据"
# 声明新派、在途和归档3个文件列表
listFilesNewDistribution = []
listFilesOnTheWay = []
listFilesClosedLoop = []
# 获得源数据文件夹的全部文件名称,并对CSV文件进行分类
dirSourceData = os.listdir(pathSourceData)
for file in dirSourceData:
if os.path.splitext(file) == ".csv":
if "新派" in file:
listFilesNewDistribution.append(file)
elif "在途" in file:
listFilesOnTheWay.append(file)
elif "归档" in file:
listFilesClosedLoop.append(file)
print(listFilesNewDistribution)
print(listFilesOnTheWay)
print(listFilesClosedLoop)
# 循环输入新派文件数据并合并
sheetNewDistribution = ""
for i in listFilesNewDistribution:
sheetTemp = pd.read_csv(pathSourceData + "\\" + i, encoding='gbk')
sheetNewDistribution = pd.concat(sheetNewDistribution, sheetTemp)
print(sheetNewDistribution)
他这不是说是str类型么,你print(type)一下看看listFilesNewDistribution这几个东西是啥类型,要不要给他转换一下。我也是新手,不过类似的bug我都是这么排除的 sheetNewDistribution应该是pandas类型对象,不应该是str类型。 这个问题我猜就是你不能把一个空的字符串和一个表拼接,你要拿一个表和一个表拼接,先把第一个表拿出来,再遍历拼接,把后面的改一下就可以了,改成这样试试
```python
# 循环输入新派文件数据并合并
count = 0
for i in listFilesNewDistribution:
if count == 0:
sheetNewDistribution = pd.read_csv(pathSourceData + "\\" + i, encoding='gbk')
count += 1
else:
sheetTemp = pd.read_csv(pathSourceData + "\\" + i, encoding='gbk')
sheetNewDistribution = pd.concat(sheetNewDistribution, sheetTemp)
print(sheetNewDistribution)
``` 我看完之后表示还没有到这么高的水平! super谦 发表于 2020-12-5 09:19
这个问题我猜就是你不能把一个空的字符串和一个表拼接,你要拿一个表和一个表拼接,先把第一个表拿出来,再 ...
报错:
Traceback (most recent call last):
File "D:/python/pyJieDuanTongBao/pyJieDuanTongBao.py", line 38, in <module>
sheetNewDistribution = pd.concat(sheetNewDistribution, sheetTemp)
File "D:\Program Files\anaconda\envs\playData\lib\site-packages\pandas\core\reshape\concat.py", line 274, in concat
op = _Concatenator(
File "D:\Program Files\anaconda\envs\playData\lib\site-packages\pandas\core\reshape\concat.py", line 309, in __init__
raise TypeError(
TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame" 你试试改成这样,就是concat两个表合并加框框框住
sheetNewDistribution = pd.concat() cqwcns 发表于 2020-12-5 09:45
报错:
Traceback (most recent call last):
你试试改成这样,就是concat两个表合并加框框框住
sheetNewDistribution = pd.concat() 厉害厉害非常的厉害 super谦 发表于 2020-12-5 09:58
你试试改成这样,就是concat两个表合并加框框框住
sheetNewDistribution = pd.concat(
应该是这个问题,我刚刚也自己写了一下,这样可以。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import numpy as np
import pandas as pd
from openpyxl import Workbook
# 声明源数据路径
pathSourceData = "源数据"
# 声明新派、在途和归档3个文件列表
listFilesNewDistribution = []
listFilesOnTheWay = []
listFilesClosedLoop = []
# 获得源数据文件夹的全部文件名称,并对CSV文件进行分类
dirSourceData = os.listdir(pathSourceData)
for file in dirSourceData:
if os.path.splitext(file) == ".csv":
if "新派" in file:
listFilesNewDistribution.append(file)
elif "在途" in file:
listFilesOnTheWay.append(file)
elif "归档" in file:
listFilesClosedLoop.append(file)
print(listFilesNewDistribution)
print(listFilesOnTheWay)
print(listFilesClosedLoop)
# ###循环输入新派文件数据###
# 如果有新派数据,就先输入第一个,再循环输入剩余的并合并
if len(listFilesNewDistribution) < 1:
print("[错误] 未找到新派源数据")
else:
# 先输入第1个数据
sheetNewDistribution = pd.read_csv(pathSourceData + "\\" + listFilesNewDistribution, encoding='gbk')
# 循环输入剩余的数据并合并
for i in range(len(listFilesNewDistribution) - 1):
i += 1
sheetTemp = pd.read_csv(pathSourceData + "\\" + listFilesNewDistribution, encoding='gbk')
sheetNewDistribution = pd.concat()
print(sheetNewDistribution)
print("[操作] 输出新派EXCEL表")
sheetNewDistribution.to_excel('xlsxNewDistribution.xlsx', sheet_name='mySheet', encoding="utf_8_sig", index=False)
页:
[1]
2