首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中使用regex从csv文件中获取数据

如何在python中使用regex从csv文件中获取数据
EN

Stack Overflow用户
提问于 2018-10-26 04:48:47
回答 2查看 80关注 0票数 0

我正在尝试从包含许多负数的列中筛选csv文件。

我在网站上找到了一个源代码,它可以处理小列表,但它不能处理csv文件中的数据。

这是我所拥有的数据的一个例子。

代码语言:javascript
复制
691
609
627
211
-226
921
829
1
972
173
181
-66
-96
573

下面是我使用的代码

代码语言:javascript
复制
import pandas as pd
from pandas import DataFrame
import numpy as np
import re

import csv
from re import findall

ful = pd.read_csv(r'/home/aziz/Desktop/testminplus.csv')
ful1 = ful[0:]

#full = ['1', '-3']
full = ful1

regex = re.compile(r'(-\d*)')
# use only one of the following lines, whichever you prefer
#filtered = filter(lambda i: not regex.search(i), full)
filtered = [i for i in full if not regex.search(i)]
print(filtered)

结果如下:

代码语言:javascript
复制
[' ', ' ', ' ', ' ', '8', '2', '3', '\n', '0', ' ', ' ', ' ', ' ', '6', '0', '9', '\n', '1', ' ', ' ', ' ', ' ', '6', '2', '7', '\n', '2', ' ', ' ', ' ', ' ', '2', '1', '1', '\n', '3', ' ', ' ', ' ', '2', '2', '6', '\n', '4', ' ', ' ', ' ', ' ', '9', '2', '1', '\n', '5', ' ', ' ', ' ', ' ', '8', '2', '9', '\n', '6', ' ', ' ', ' ', ' ', ' ', ' ', '1', '\n', '7', ' ', ' ', ' ', ' ', '9', '7', '2', '\n', '8', ' ', ' ', ' ', ' ', '1', '7', '3', '\n', '9', ' ', ' ', ' ', ' ', '1', '8', '1', '\n', '1', '0', ' ', ' ', ' ', '6', '6', '\n', '1', '1', ' ', ' ', ' ', '9', '6', '\n', '1', '2', ' ', ' ', ' ', '5', '7', '3', '\n', '1', '3', ' ', ' ', ' ', '8', '9', '5', '\n', '1', '4', ' ', ' ', ' ', '1', '1', '8', '\n', '1', '5', ' ', ' ', ' ', ' ', '7', '\n', '1', '6', ' ', ' ', '6', '9', '8', '\n', '1', '7', ' ', ' ', ' ', '3', '5', '1', '\n', '1', '8', ' ', ' ', ' ', '9', '3', '3', '\n', '1', '9', ' ', ' ', ' ', '9', '3', '2', '\n', '2', '0', ' ', ' ', ' ', '7', '3', '2', '\n', '2', '1', ' ', ' ', '6', '6', '0', '\n', '2', '2', ' ', ' ', '4', '6', '5', '\n', '2', '3', ' ', ' ', ' ', '3', '4', '5', '\n', '2', '4', ' ', ' ', ' ', ' ', '1', '8', '\n', '2', '5', ' ', ' ', ' ', '1', '2', '0', '\n', '2', '6', ' ', ' ', '2', '7', '0', '\n', '2', '7', ' ', ' ', '2', '3', '3', '\n', '2', '8', ' ', ' ', '1', '5', '2', '\n', '2', '9', ' ', ' ', ' ', '1', '8', '6', '\n', '3', '0', ' ', ' ', '3', '9', '6', '\n', '3', '1', ' ', ' ', '5', '3', '5', '\n', '3', '2', ' ', ' ', ' ', '3', '5', '9', '\n', '3', '3', ' ', ' ', ' ', ' ', '1', '\n', '3', '4', ' ', ' ', '5', '3', '3', '\n', '3', '5', ' ', ' ', ' ', '8', '1', '2', '\n', '3', '6', ' ', ' ', ' ', '5', '4', '6']

所需的输出如下所示:

代码语言:javascript
复制
123
213
2
5

你知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-26 05:10:37

如果你只得到了一个每行只有一个数字的文件(而不是一个实际的CSV文件,它有多个字段,这似乎不是你的情况),那么你可以这样做:

代码语言:javascript
复制
with open('/home/aziz/Desktop/testminplus.csv') as fin:
    # generator to yield each line as an integer
    data = (int(line) for line in fin)
    # list-comp to only include positive numbers...
    positive = [n for n in data if n >= 0]
票数 1
EN

Stack Overflow用户

发布于 2018-10-26 05:58:07

Pandas的解决方案在这里可能有些夸张,但也很有效。

代码语言:javascript
复制
import pandas as pd
# read file
df = pd.read_csv("/home/aziz/Desktop/testminplus.csv", 
                 header=None, 
                 converters={0: int}) # spits an error if non-numbers are present
# filter positives
df = df[df[0]>=0]
# write back 
df.to_csv("/home/aziz/Desktop/positives_only.csv", 
          header=False, 
          index=False)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52997891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档