Python Pandas iterrows 方法

Python Pandas iterrows method

我 "pseudo" 通过读取 csv 文件创建一个 .bib 文件,然后 structure 写下包括换行符在内的所有内容。这是一个乏味的过程,但它是在 python 中将 csv 转换为 .bib 的原始形式。

我正在使用 Pandas 读取 csv 并逐行写入,(因为它有特殊字符我正在使用 latin1 编码器)但我遇到了一个大问题:它只读取第一排。来自官方 documentation 我正在使用他们的方法逐行阅读,这只给了我第一行(示例 1):

 row = next(df.iterrows())[1] 

但是如果我删除 next() 和 [1],它会给出集中在一个字段中的每一列的内容(示例 2)。

为什么会这样?为什么使用文档中的方法不能很好地遍历所有行?如果不是所有行,示例 1 的解决方案如何?

我的代码:

import csv
import pandas
import bibtexparser
import codecs

colnames = ['AUTORES', 'TITULO', 'OUTROS', 'DATA','NOMEREVISTA','LOCAL','VOL','NUM','PAG','PAG2','ISBN','ISSN','ISSN2','ERC','IF','DOI','CODEN','WOS','SCOPUS','URL','CODIGO BIBLIOGRAFICO','INDEXAÇÕES',
        'EXTRAINFO','TESTE']
data = pandas.read_csv('test1.csv', names=colnames, delimiter =r";", encoding='latin1')#, nrows=1

df = pandas.DataFrame(data=data)

with codecs.open('test1.txt', 'w', encoding='latin1') as fh:
    fh.write('@Book{Arp, ')
    fh.write('\n')

rl = data.iterrows()

for i in rl:
    ix = str(i)
    fh.write('  Title                    = {')
    fh.write(ix)
    fh.write('}')
    fh.write('\n')

PS:我是 python 和编程的新手,我知道这段代码有缺陷,它不是将 csv 转换为 bib 的最有效方法。

例子row = next(df.iterrows())[1]故意只returns第一行。

df.iterrows() returns generator 元组 上描述行。元组的第一个条目包含行索引,第二个条目是包含行数据的 pandas 系列。

因此,next(df.iterrows()) returns 生成器的下一个条目。如果之前未调用 next,则这是第一个 元组 。 因此,next(df.iterrows())[1] returns 第一行(即第二个元组条目)作为 pandas 系列。

你要找的可能是这样的:

for row_index, row in df.iterrows():
   convert_to_bib(row)

其次,所有对文件句柄 fh 的写入都必须在块 with codecs.open('test1.txt', 'w', encoding='latin1') as fh: 内进行 因为在块的末尾,文件句柄将被关闭。

例如:

with codecs.open('test1.txt', 'w', encoding='latin1') as fh:
    # iterate through all rows
    for row_index, row in df.iterrows():
       # iterate through all elements in the row
       for colname in df.columns:
           row_element = row[colname]
           fh.write('%s = {%s},\n' % (colname, str(row_element)))

我仍然不确定列的名称是否与您想到的 bibtex 字段完全匹配。可能你必须先转换这些。但我希望你能理解迭代背后的原理:-)