【发布时间】:2019-11-11 21:03:23
【问题描述】:
我目前正在为脚本制作不同的函数,并且我有一个与 writerow() 完美配合的函数,但是对于我的其他函数,我使用了 pandas,我正在尝试寻找与之等效的函数。我很确定to_csv 不是我想要的。
这是在两个函数上测试的同一个 CSV。
jeffrey,192.168.1.1,example1.com,30220,internet serverice provider 1
mike,192.168.1.2,example2.com,30220,internet service provider 1
frank,192.168.1.3,example3.com,30220,internet service provider 1
lucy,192.168.1.4,example4.com,14619,internet service provider 2
louisa,192.168.1.5,example5.com,14619,internet service provider 2
emily,192.168.1.6,example6.com,3357,internet service provider 3
john,192.168.1.7,example7.com,210,internet service provider 4
这是我的脚本,适用于writerow()
import csv
document= open("sample.csv")
def start_yes():
with open ('good_numbers', 'w') as output:
with document as file:
output_data = csv.writer(output, delimiter = ',')
reader = csv.reader(file)
list_1 = ['3357','210']
for row in reader:
if row[3] in list_1:
output_data.writerow(row)
使用 sample.csv 运行此脚本会为我提供这样的结果,这正是我想要的。
emily,192.168.1.6,example6.com,3357,internet service provider 3
john,192.168.1.7,example7.com,210,internet service provider 4
这是我试图找到与 writerow() 等效的脚本,但使用的是 pandas 模块。
import pandas as pd
df = pd.read_csv('sample.csv', header=None)
good_nums = ['3357','210']
bad_nums = ['30220']
maybe_nums = list(set(df[3].tolist()) - set(good_nums + bad_nums))
for asn in df:
if asn in df[3]:
asn.to_csv('output.csv', index=False)
如何使用使用 pandas 的脚本使我的结果看起来像这样
lucy,192.168.1.4,example4.com,14619,internet service provider 2
louisa,192.168.1.5,example5.com,14619,internet service provider 2
非常感谢任何帮助!
【问题讨论】:
-
使用 pandas 时,显式循环通常是不必要的,而且非常不利。
标签: python python-3.x pandas csv if-statement