cqwcns 发表于 2020-12-4 23:29

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)

qq353324582 发表于 2020-12-5 00:15

他这不是说是str类型么,你print(type)一下看看listFilesNewDistribution这几个东西是啥类型,要不要给他转换一下。我也是新手,不过类似的bug我都是这么排除的

liujg 发表于 2020-12-5 08:05

sheetNewDistribution应该是pandas类型对象,不应该是str类型。

super谦 发表于 2020-12-5 09:19

这个问题我猜就是你不能把一个空的字符串和一个表拼接,你要拿一个表和一个表拼接,先把第一个表拿出来,再遍历拼接,把后面的改一下就可以了,改成这样试试
```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)
```

luxingyu329 发表于 2020-12-5 09:31

我看完之后表示还没有到这么高的水平!

cqwcns 发表于 2020-12-5 09:45

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"

super谦 发表于 2020-12-5 09:58

你试试改成这样,就是concat两个表合并加框框框住
sheetNewDistribution = pd.concat()

super谦 发表于 2020-12-5 09:58

cqwcns 发表于 2020-12-5 09:45
报错:

Traceback (most recent call last):


你试试改成这样,就是concat两个表合并加框框框住
sheetNewDistribution = pd.concat()

daxionglyly 发表于 2020-12-5 10:18

厉害厉害非常的厉害

cqwcns 发表于 2020-12-5 10:24

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
查看完整版本: Python pandas循环输入CSV并合并的问题