将CSV行号除以以逗号和空格分隔的列

时间:2019-01-30 08:56:29

标签: python pandas csv

我有两种类型的csv文件,它们都有几行,但有时用空格隔开,有时用逗号隔开。对于逗号,我没有发现将它们添加到DataFrame的问题,但是对于空格,我确实有问题,我在下面的代码中引入了文件链接。 ex1.csv用逗号分隔,而ex2.csv用空格分隔。

https://1drv.ms/f/s!AgQ59n47uloFzSPbIlS9RhRNfZ1p

import os
import pandas as pd
import numpy as np
import openpyxl as pyx
import numpy as np

x=[]
y=[]
z=[]
Rx=[]
Ry=[]
Rz=[]
atot=[]

t=[]

f = io.open(file, mode="r", encoding="utf-8")

lines=f.readlines()

for i in lines:
    try:
        a=[i.strip('\n')]
        a1=[float(n) for n in a[0].split(',')]

            t.append(a1[1])
            x.append(a1[4])
            y.append(a1[3])
            z.append(a1[2])
            Rx.append(a1[7])
            Ry.append(a1[6])
            Rz.append(a1[5])

        except :
            a=[i.split('\n')]
            a1=[float(n) for n in a[0].split()]
            x.append(a1[3])
            y.append(a1[2])
            z.append(a1[1])
            Rx.append(a1[6])
            Ry.append(a1[5])
            Rz.append(a1[4])

以上:如果分隔符为逗号,则会收到以下错误消息: “列表”对象没有属性“分割” 这是由于a是以这种方式读取的:

a= [['\ufeff     -1.3053      2.2743     -5.0045      0.0121      0.1814     -0.0285      0.0000      0.0000',
  '']]

我要补充一点,即我之前是用逗号分隔包含这些行的行(除了这种方式之后的各行,而且分隔得很好,但是当尝试将其添加到DataFrame时,它给我带来了错误提示:

            t.append(i.split()[0]);
            x.append(i.split()[3]);
            y.append(i.split()[2]);
            z.append(i.split()[1]);
            Rx.append(i.split()[6]);
            Ry.append(i.split()[5]);
            Rz.append(i.split()[4]);

添加一点,即以这种方式完成对DataFrame的添加:

df1 = pd.DataFrame(list(zip(x, y, z, Rx, Ry, Rz)), columns=['x', 'y', 'z', 'Rx' , 'Ry', 'Rz'])

for i in df1.columns:
    mylist+=(list(df1.loc[df1[i].argmax()]))
for i in df1.columns:
    mylist+=(list(df1.loc[df1[i].argmin()]))

1 个答案:

答案 0 :(得分:1)

Pandas有一个非常强大的方法pd.read_csv(...),该方法解决了读取各种csv文件时的大部分麻烦。也许我错过了一些阻碍您使用pd.read_csv(...)的关键问题,但是以下代码应作为概念证明。

df1 = pd.read_csv("ex1.csv", sep=",", header=None)
df1.columns = ["t", "atot", 'x', 'y', 'z', 'Rx', 'Ry', 'Rz']
print(df1)

df2 = pd.read_csv("ex2.csv", sep=" ", header=None) 
df2 = df2.dropna(axis=1)  # Eliminate the columns that were created because of multiple spaces as separators
df2.columns = ["t", "atot", 'x', 'y', 'z', 'Rx', 'Ry', 'Rz']
print(df2)

我认为通常csv损坏不应作为逐行读取csv文件的理由。

如果以后需要单独的列作为列表,则可以随时如下创建它们:

X = df2['x'].values.tolist()
Rx = df2['Rx'].values.tolist()

但是,您应该避免使用太多变量,因为您可能已经知道。另外,从您的原始代码来看,感觉您应该花更多时间来征服Pandas的基础知识,例如:here。有一些学习曲线,但以后会为您节省很多痛苦。