Python 如何使用给定参数从csv文件中提取特定数据?

Python 如何使用给定参数从csv文件中提取特定数据?,python,csv,sentiment-analysis,Python,Csv,Sentiment Analysis,我想从给定的csv文件(到一个单独的.txt文件)中提取中性词,但我对python相当陌生,对文件处理知之甚少。我找不到一个中性词数据集,但在到处搜索之后,我找到了这个 下面是我想从中提取数据的Gtihub项目(以防有人需要知道): 因此,基本上我只想从csv中提取那些数字值为0的单词(文本) import pandas df = pandas.read_csv("yourfile.csv") df.columns = ['word', 'sentiment'] 用感情来选择词语: posit

我想从给定的csv文件(到一个单独的.txt文件)中提取中性词,但我对python相当陌生,对文件处理知之甚少。我找不到一个中性词数据集,但在到处搜索之后,我找到了这个

下面是我想从中提取数据的Gtihub项目(以防有人需要知道):

因此,基本上我只想从csv中提取那些数字值为0的单词(文本)

import pandas
df = pandas.read_csv("yourfile.csv")
df.columns = ['word', 'sentiment']
用感情来选择词语:

positive = df[df['sentiment'] > 0]['word']
negative = df[df['sentiment'] < 0]['word']
neutral = df[df['sentiment'] == 0]['word']
positive=df[df['emotional']>0]['word']
否定=df[df[‘情绪’]<0][‘单词’]
中性=df[df['emotional']==0]['word']
像这样使用熊猫:

import pandas
df = pandas.read_csv("yourfile.csv")
df.columns = ['word', 'sentiment']
用感情来选择词语:

positive = df[df['sentiment'] > 0]['word']
negative = df[df['sentiment'] < 0]['word']
neutral = df[df['sentiment'] == 0]['word']
positive=df[df['emotional']>0]['word']
否定=df[df[‘情绪’]<0][‘单词’]
中性=df[df['emotional']==0]['word']

即使不使用任何库,使用csv也相当容易

首先打开文件(我假设您将路径保存在变量
filename
),然后使用
readlines()
函数读取文件,然后根据您给出的条件过滤掉

with open(filename, 'r') as csv:                         # Open the file for reading
    rows = [line.split(',') for line in csv.readlines()] # Read each the file in lines, and split on commas
    filter = [line[0] for line in rows if abs(float(line[1])) < 1]   
                                                         # Filter out all lines where the second value is not equal to 1
打开(文件名为“r”)作为csv:#打开文件进行读取
rows=[line.split(',')表示csv.readlines()中的行]#以行读取每个文件,并以逗号分隔
如果abs(float(line[1]))<1,则filter=[line[0]表示行中的行
#过滤掉第二个值不等于1的所有行

这是现在公认的答案,所以我添加了一个免责声明。有许多原因可以解释为什么不应在未经考虑的情况下将此代码应用于其他CSV

  • 它读取内存中的整个CSV
  • 它不考虑例如引用

这对于非常简单的CSV来说是可以接受的,但是如果您不能确定CSV不会破坏此代码,那么这里的其他答案会更好。

即使不使用任何库,使用CSV也是相当容易的

首先打开文件(我假设您将路径保存在变量
filename
),然后使用
readlines()
函数读取文件,然后根据您给出的条件过滤掉

with open(filename, 'r') as csv:                         # Open the file for reading
    rows = [line.split(',') for line in csv.readlines()] # Read each the file in lines, and split on commas
    filter = [line[0] for line in rows if abs(float(line[1])) < 1]   
                                                         # Filter out all lines where the second value is not equal to 1
打开(文件名为“r”)作为csv:#打开文件进行读取
rows=[line.split(',')表示csv.readlines()中的行]#以行读取每个文件,并以逗号分隔
如果abs(float(line[1]))<1,则filter=[line[0]表示行中的行
#过滤掉第二个值不等于1的所有行

这是现在公认的答案,所以我添加了一个免责声明。有许多原因可以解释为什么不应在未经考虑的情况下将此代码应用于其他CSV

  • 它读取内存中的整个CSV
  • 它不考虑例如引用

对于非常简单的CSV来说,这是可以接受的,但是如果您不能确定CSV不会破坏此代码,那么这里的其他答案会更好。

如果您不想使用任何其他库,您可以尝试使用
CSV
模块。请注意,
delimiter='\t'
在您的情况下可能会有所不同

import csv

f = open('name.txt', 'r')
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
for row in reader:
   if(float(row[1]) > 0.0):
      print(row[0] + ' ' row[1])

如果不想使用任何其他库,可以尝试使用
csv
模块。请注意,
delimiter='\t'
在您的情况下可能会有所不同

import csv

f = open('name.txt', 'r')
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
for row in reader:
   if(float(row[1]) > 0.0):
      print(row[0] + ' ' row[1])

这里有一种只使用普通libs而不将整个文件保存在内存中的方法

import csv

def get_vals(filename):
    with open(filename, 'rb') as fin:
        reader = csv.reader(fin)
        for line in reader:
            if line[-1] <= 0:
                yield line[0]

words = get_vals(filename)

for word in words:
    do stuff...
导入csv
def get_VAL(文件名):
打开(文件名为“rb”)作为fin:
读卡器=csv.读卡器(fin)
对于行内读取器:

如果第[-1]行,这里有一种方法可以只使用普通libs,而不将整个文件保存在内存中

import csv

def get_vals(filename):
    with open(filename, 'rb') as fin:
        reader = csv.reader(fin)
        for line in reader:
            if line[-1] <= 0:
                yield line[0]

words = get_vals(filename)

for word in words:
    do stuff...
导入csv
def get_VAL(文件名):
打开(文件名为“rb”)作为fin:
读卡器=csv.读卡器(fin)
对于行内读取器:


如果第[-1]行我们可以使用像Pandas这样的库,或者答案应该局限于标准的香草库吗?您确定这是一个
csv
看起来像一个不同的库吗format@eagle提供的链接显示了他使用的实际文件最好不要提供链接,而是发布snippets@eagle给你,我们可以像熊猫一样使用图书馆吗,或者答案应该局限于标准的普通库吗?你确定这是一个
csv
看起来像是另一个format@eagle提供的链接显示了他使用的实际文件最好不要提供链接,而是发布snippets@eagle给你,这是个坏主意,将整个文件加载到内存中,如果它很大怎么办?而且,这只会选择那些具有中性点的sentiment@eagleOP只请求值为0的行,该文件的大小和格式已知,他没有指定是否可以访问pandas。这是关于如何在没有库的情况下实现这一点的说明,而不仅仅是一个通用解决方案。其他答案给出了一个通用的解决方案。阅读CSV文件不是那么容易,比如说引用如何?很抱歉,我无法正确表达我想要的东西。我只想要那些对应数值在1和-1之间的文本值。任何0.xx或-0的值。xx@ANiK3T为了反映这一点,我改变了答案。尽管如此,如果您试图将此代码应用于任何随机csv,这里的其他注释应该足够警告您。希望这能帮助您理解csv解析中的内容:)这是个坏主意,将整个文件加载到内存中,如果文件很大怎么办?而且,这只会选择那些具有中性点的sentiment@eagleOP只请求值为0的行,该文件的大小和格式已知,他没有指定是否可以访问pandas。这是关于如何在没有库的情况下实现这一点的说明,而不仅仅是一个通用解决方案。还提供了其他答案,给出了一般性的答案