Pandas在阅读多个文件时读取CSV错误

xbp102n0  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(145)

我有多个csv文件,命名为2C-BEB-29-2009-01- 18.csv、2C-BEB-29-2010-02- 18.csv、2C-BEB-29-2010-03-28.csv、2C-ISI-12-2010-01-01.csv等。

  • 2C-零件在所有csv文件中均为默认值。
  • BEB表示记录设备的名称
  • 29代表用户ID
  • 2009-01-18表示录制日期。

我有大约150个不同的ID和他们的录音与不同的设备。我想自动化以下的方法,我已经做了一个单一的用户ID的所有用户ID
当我对单个用户使用以下代码时,即pattern ='2C-BEB-29-*. csv',以字符串格式。请注意,我在正确的目录中。

def pd_read_pattern(pattern):
   files = glob.glob(pattern)

   df = pd.DataFrame()
   for f in files:
       csv_file = open(f)
       a = pd.read_csv(f,sep='\s+|;|,', engine='python')
       #date column should be changed depending on patient id
       a['date'] = str(csv_file.name).rsplit('29-',1)[-1].rsplit('.',1)[0]

       #df = df.append(a)
       #df = df[df['hf']!=0]

   return df.reset_index(drop=True)

为了将上面的代码应用于所有用户ID,我以下面的方式读取了CSV文件,并将它们保存到列表中。为了避免重复的ID,我在此代码片段的末尾将列表转换为集合。

import glob
lst=[]
for name in glob.glob('*.csv'):
    if len(name)>15:
        a = name.split('-',3)[0]+"-"+name.split('-',3)[1]+"-"+name.split('-',3)[2]+'-*'
        lst.append(a)
lst = set(lst)

现在,具有以下示例格式的唯一ID的名称:'2C-BEB-29-*. csv'。在以下代码片段的帮助下,我尝试读取用户ID。但是,我在www.example.com _csv行中遇到unicode/decode错误pd.read。您能帮助我解决此问题吗?

for file in lst:
    #print(type(file))
    files = glob.glob(file)
    #print(files)
    df = pd.DataFrame()
    for f in files:
        csv_file = open(f)
        #print(f, type(f))
        a = pd.read_csv(f,sep='\s+|;|,', engine='python')

        #date column should be changed depending on patient id
        #a['date'] = str(csv_file.name).rsplit(f.split('-',3)[2]+'-',1)[-1].rsplit('.',1)[0]

        #df = df.append(a)
        #df = df[df['hf']!=0]

    #return df.reset_index(drop=True)
42fyovps

42fyovps1#

首先,

import chardet

然后,将您的代码片段替换为

a =  pd.read_csv(f,sep='\s+|;|,', engine='python')

用这个

with open(f, 'rb') as file: 
   encodings = chardet.detect(file.read())["encoding"] 
   a =  pd.read_csv(f,sep='\s+|;|,', engine='python', encoding=encodings)

相关问题