为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas read_csv 不读取文件(while 循环)

Pandas read_csv 不读取文件(while 循环)

慕无忌1623718 2023-06-27 13:24:21
我正在尝试阅读我存储在电脑上的几张(~30)csv 表。i=2Liste1 = []Liste2 = []x = 0while 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 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

问题在于它如何读取';'其他文件(第一个文件除外)。如果你用 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})


查看完整回答
反对 回复 2023-06-27
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

尝试在此处创建一个新的数据框,而不是迭代现有的数据框


cols = ['AC', 'DC']

new_Tabelle = pd.DataFrame(columns = cols)

new_Tabelle['AC']=Tabelle['AC']

new_Tabelle['DC']=Tabelle['DC']


查看完整回答
反对 回复 2023-06-27
?
largeQ

TA贡献2039条经验 获得超7个赞

我没有 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")])


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信