Pandas忽略/删除csv文件中的行之间的字符串,但dropna dosen'似乎工作

时间:2018-06-08 15:45:54

标签: python pandas csv

借助Jared的帮助和我自己的一点点研究,我提出了以下解决方案:

df = pd.read_csv(DATAFILE_INPUT, sep='\t', skiprows=8, error_bad_lines=False, warn_bad_lines=False, decimal=',')
df.columns =['Zeit', 'Zyklus', 'Weg','Kraft', 'Dehnung', 'Temperatur', 'Temp. oben','Temp. mitte', 'Temp. untens']

df = df[df.Zeit.str.contains('Zeit') == False]
df.columns = ['s','segments','mm','kN','%','°C','°C','°C','°C']
df = df[df.s.str.contains('s') == False]

感谢大家的帮助。

我正在尝试使用pandas创建一个新的CSV文件,但raw.date文件每行x行有4行。

python 2.7

我的代码到目前为止:

DATAFILE_INPUT ='test.dat'     DATAFILE_OUTPUT_1 ='test.out'

    in_columns = ['a', 'b', 'c','d']
# read in data (skip some rows / column separator is a tab / no header use our names / decimal separator is a comma)
    df = pd.read_csv(DATAFILE_INPUT, skiprows=1, sep='\t', header=None, names=in_columns, decimal=',')

    out_columns = ['a','b', 'c', 'd']

    df.index += 1

    # save data (filename / print row numbers / tab separator / only print defined columns / decimal separator)
    df.to_csv(path_or_buf=DATAFILE_OUTPUT_1, index=True, sep='\t', columns=out_columns, decimal='.')

这里是我使用的包:

 import pandas as pd

一个更好的例子:

  In: index a b c d
     0   1,3 1,4  1,32 1,4325 
      1  2,234 2,123 3,123 1,123
     2
    4       name 
    5      guido 
     6     mother 
     7    2,123 2,123123 4,123123 5,123123
     8   1,123123 2,123123 3,123123 4,123123 
     9  1,123123 2,123123 3,123123 4,123123
    10
    11       name 
    12      guido 
     13     mother 
      15    1,2134234 3,34324 3,234234 5,234234

这就是我想要的输出:

Out: index a b c d
         0   1.3 1.4  1.32 1.4325 
          1  2.234 2.123 3.123 1.123
         2    2.123 2.123123 4.123123 5.123123
         3   1.123123 2.123123 3.123123 4.123123 
         4  1.123123 2.123123 3.123123 4.123123
          5    1.2134234 3.34324 3.234234 5.234234

等等,我必须做什么删除,擦除,忽略那4行

这是我的数据样本和第一个结果的链接。 https://www.dropbox.com/s/syocsw1l3fyju3q/RF_P92_500_180_023_1.dat?dl=0 https://www.dropbox.com/s/or93sk6vxb9z836/test.out?dl=0] 2

1 个答案:

答案 0 :(得分:1)

您可以将error_bad_lines设置为False,将warn_bad_lines设置为False(如果您不这样做,它会打印出所有不良行以警告您)。

  

error_bad_lines:boolean,默认为True

     

具有太多字段的行(例如,逗号太多的csv行)将会   默认情况下会引发异常,并且不会引发任何DataFrame   回。如果为假,则这些“坏线”将从中掉落   返回的DataFrame。

import pandas as pd

df = pd.read_csv('./RF_P92_500_180_023_1.dat', sep='\t', skiprows=9,
                 encoding='latin-1', error_bad_lines=False, warn_bad_lines=False)

我在您提供的文件上运行了上述内容,但您需要花些时间来验证它是否包含您要保留的所有行。结果数据框的形状为(10269,9)

替代方案,更实际的方法,因为这个文件是非标准格式,我不知道你的预期输出是什么样的(你期望多少列?):

import csv
import pandas as pd

# using csv with Pandas

filename = 'RF_P92_500_180_023_1.dat'
header = ['Zeit', 'Zyklus Zähler Zähler', 'Weg',
          'Kraft', 'Dehnung', 'Temperatur', 'Temp. oben',
          'Temp. mitte', 'Temp. untens', 'segments',
          'mm', 'kN', '%', '°C', '°C', '°C', '°C']

data = []
with open(filename, 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        if len(row) == 9:
            # flatten a list of lists into single list
            final_row = sum([item.split('\t') for item in row], [])
            data.append(final_row)

df = pd.DataFrame(data=data, columns=header)
print(df.shape) # (10046, 17)