Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跟踪csv文件中的有效行_Python_Csv - Fatal编程技术网

Python 跟踪csv文件中的有效行

Python 跟踪csv文件中的有效行,python,csv,Python,Csv,我有一个如下的csv文件: 1 2 3 4 5 6 4 5 6 3 # 2 2 4 5 6 3 1 3 4 % $ 2 1 1 2 3 4 5 8 我只想要包含所有数字的行,而不是任何其他字符。有没有办法只跟踪正确的行,这些行中只有数字 到目前为止,我只有这个: import csv def get_rows(csv_file): csv_read = open(csv_file) reader = csv.reader(csv_re

我有一个如下的csv文件:

    1 2 3 4 5 6
    4 5 6 3 # 2
    2 4 5 6 3 1 
    3 4 % $ 2 1
    1 2 3 4 5 8
我只想要包含所有数字的行,而不是任何其他字符。有没有办法只跟踪正确的行,这些行中只有数字

到目前为止,我只有这个:

import csv
def get_rows(csv_file):

    csv_read = open(csv_file)
    reader = csv.reader(csv_read)

    invalid_rows = 0
    for row in reader:

我只是不知道如何跟踪正确的行,以及如何将无效行添加到计数器。我希望将来能够使用正确的行,只需将错误行的数量添加到计数器中即可

我建议使用pandas,它在处理表格数据时非常强大。 有关使用的方法,请参见本文:

注意:此代码是内存中的类型,因此可能无法工作

import pandas as pd

data_frame = pandas.read_csv(csv_file)
data_frame.transpose() # we are interested in the rows, but pandas is primarily column oriented
incorrect_cols = data_frame.select_dtypes(exclude=["number"])
number_cols = data_frame.select_dtypes(include=["number"])
number_cols.transpose() # now the old format again

我建议使用pandas,它在处理表格数据时非常强大。 有关使用的方法,请参见本文:

注意:此代码是内存中的类型,因此可能无法工作

import pandas as pd

data_frame = pandas.read_csv(csv_file)
data_frame.transpose() # we are interested in the rows, but pandas is primarily column oriented
incorrect_cols = data_frame.select_dtypes(exclude=["number"])
number_cols = data_frame.select_dtypes(include=["number"])
number_cols.transpose() # now the old format again

下面是一个纯python解决方案:

$ cat data 
1 2 3 4 5 6
4 5 6 3 # 2
2 4 5 6 3 1 
3 4 % $ 2 1
1 2 3 4 5 8
$ cat p.py 
import csv, re

validRows=[]
with open('data', 'r') as f:
    reader=csv.reader(f, delimiter=' ')
    for row in reader:
        if all([re.match(r'^\d+$', item) is not None for item in row]):
            validRows+=[row]
print(validRows)
$ python3 p.py 
[['1', '2', '3', '4', '5', '6'], ['1', '2', '3', '4', '5', '8']]
$
不使用
re

import csv

validRows=[]
with open('data', 'r') as f:
    reader=csv.reader(f, delimiter=' ')
    for row in reader:
        if all([item.isdigit() for item in row]):
            validRows+=[row]
print(validRows)

下面是一个纯python解决方案:

$ cat data 
1 2 3 4 5 6
4 5 6 3 # 2
2 4 5 6 3 1 
3 4 % $ 2 1
1 2 3 4 5 8
$ cat p.py 
import csv, re

validRows=[]
with open('data', 'r') as f:
    reader=csv.reader(f, delimiter=' ')
    for row in reader:
        if all([re.match(r'^\d+$', item) is not None for item in row]):
            validRows+=[row]
print(validRows)
$ python3 p.py 
[['1', '2', '3', '4', '5', '6'], ['1', '2', '3', '4', '5', '8']]
$
不使用
re

import csv

validRows=[]
with open('data', 'r') as f:
    reader=csv.reader(f, delimiter=' ')
    for row in reader:
        if all([item.isdigit() for item in row]):
            validRows+=[row]
print(validRows)