熊猫read_csv不读取文件(while循环)

时间:2020-08-27 09:24:47

标签: python pandas while-loop

我正试图阅读我存储在PC上的几张(约30张)csv表格。

i=2
Liste1 = []
Liste2 = []
x = 0
while i < 32:
    string = str(i)
    if i < 10:
        try:

            Name = 'D:\\FTPDaten\\2020\\Alle\\2020010'+string+'.csv'
            Tabelle = pd.read_csv(Name, sep=';', decimal=",", header=0, usecols=[7, 20])
            Tabelle.columns = ['AC', 'DC']

            neueTabelle1 = Tabelle['AC']
            neueTabelle = Tabelle['DC']
            Schleifenlaenge = len(neueTabelle)
            j = 0
            del(Tabelle)
            while j < Schleifenlaenge:

                Datenwert1 = neueTabelle.iloc[j]
                Datenwert2 = neueTabelle1.iloc[j]
                Liste1.append(Datenwert1)
                Liste2.append(Datenwert2)
                j = j + 1
        except FileNotFoundError:
            i=i+1


    elif i >= 10 and i < 32:
        try:
            Name = 'D:\\FTPDaten\\2020\\Alle\\202001' + string + '.csv'
            Tabelle = pd.read_csv(Name, sep=';', decimal=",", header=0, usecols=[7, 20])
            Tabelle.columns = ['AC', 'DC']

            neueTabelle1 = Tabelle['AC']
            neueTabelle = Tabelle['DC']
            Schleifenlaenge = len(neueTabelle)
            j = 0
            
            while j < Schleifenlaenge:
                Datenwert1 = neueTabelle1.iloc[j]
                Datenwert2 = neueTabelle.iloc[j]
                Liste1.append(Datenwert1)
                Liste2.append(Datenwert2)
                j = j + 1
        except FileNotFoundError:
            i = i+1
    i = i + 1

当while循环第一次运行时,一切正常。第一次迭代时,read_csv不会像以前那样读取文件。我希望得到一个存储第7和第20列的DataFrame。但是我确实得到了一个完全没有内容的DataFrame-仅是标题。 我做了很多尝试,但是当然我无法解决。

3 个答案:

答案 0 :(得分:0)

尝试在此处创建新的数据框,而不要遍历现有数据框

cols = ['AC', 'DC']
new_Tabelle = pd.DataFrame(columns = cols)
new_Tabelle['AC']=Tabelle['AC']
new_Tabelle['DC']=Tabelle['DC']

答案 1 :(得分:0)

我没有30个以分号分隔的文件。但是,可以很容易地将其简化为仅使用glob

来拾取存在的文件并匹配其模式
import pandas as pd
from pathlib import Path
import random

for i in range(30):
    with open(f"2020010_os_{i}.csv", "w") as fp: fp.write(f"id;val\n{i};{random.randint(10,20)}\n")
        
pd.concat([pd.read_csv(fn, sep=";") for fn in Path().cwd().glob("2020010*.csv")])

答案 2 :(得分:0)

问题在于如何读取其他文件(第一个文件除外)中的';'。如果您在excel中打开它们,则可能可以看到我在说什么。因此,您需要做的就是跳过文件开头的那些行。

import pandas as pd

Liste1 = []
Liste2 = []

for i in range(2,32):
    skipRows = 7
    if i != 2:
        skipRows += 1
    if i < 10:
        try:
            Name = 'D:\\FTPDaten\\2020\\Alle\\2020010{string}.csv'.format(string=i)
            Tabelle = pd.read_csv(Name, sep=';', decimal=",", header=0, usecols=[7, 20], skiprows=skipRows)
            Tabelle.columns = ['AC', 'DC']
 
            if i < 10:
                Datenwert1 = list(Tabelle['DC'])
                Datenwert2 = list(Tabelle['AC'])
            elif i >= 10 and i < 32:
                Datenwert1 = list(Tabelle['AC'])
                Datenwert2 = list(Tabelle['DC'])
                
            Liste1 += Datenwert1
            Liste2 += Datenwert2
        except FileNotFoundError as e:
            print(e)

df = pd.DataFrame({'col1':Datenwert1,   #<-- change 'col1', 'col2' to whatever you want to name them
                   'col2':Datenwert2})