Python 跟踪csv文件中的有效行
我有一个如下的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
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)