我试图迭代通过两列在csv文件使用python?,我听说你必须为此导入Pandas,但我只是在编码部分挣扎。
import csv as csv
import numpy as np
import pandas as pd
csv_file_object = csv.reader(open('train.csv', 'rb')) # Load in the csv file
header = csv_file_object.next() # Skip the fist line as it is a header
data=[] # Create a variable to hold the data
for row in csv_file_object: # Skip through each row in the csv file,
data.append(row[0:]) # adding each row to the data variable
data = np.array(data)
def number_of_female_in_class_3(data):
for row in data.iterow:
if row[2] == 'female' and row[4] == '3':
sum += 1
问题是函数number_of_female_in_class_3我想遍历两列,我想遍历第2列以检查行是否包含字符串'female',并遍历第4列并检查状态是否为'3'。如果为真,那么我想递增1以sum。
我想知道是否有人可以发布一个简单的代码如何实现这一点?
这是火车.csv文件IM试图检索.
**PassengerID** | **Survived** | **Pclass** | **Name** | **Sex** |
1 | 0 | 3 | mary | Female |
2 | 1 | 2 | james | Male |
3 | 1 | 3 | Tanya | Female |
谢谢你
3条答案
按热度按时间lsmepo6l1#
实际上,
pandas
可以在这里帮助您。我从一个更干净的CSV开始:
如果您的CSV实际上看起来像您发布的内容(不是真正的CSV),那么您将有一些争论要做(见下文)。但是如果你能让
pandas
吃掉它:生成新的
DataFrame
:您可以执行
len(result)
以获得所需的计数。加载该CSV
如果你被这个讨厌的CSV卡住了,你可以像这样得到你的
df
:8ulbf1ek2#
我想这就是你需要的:
一些解释:
首先,在你的文件中,你有一个大写的F女性,其次,你有你的列数字向后(性别在第5列,类在第3列)你需要初始化的总和变量为0之前,你开始递增它。这里不需要numpy和pandas,但需要对每行中的每个元素应用strip函数以删除多余的空格(
map(str.strip, row)
),并将delimiter='|'
传递到csv.reader
,因为默认分隔符是逗号。最后,你需要在函数的最后加上return sum
。rpppsulh3#
将pandas导入为pd
将CSV文件1加载到DataFrame
df1 =pd.read_csv(“file1.csv”)
将CSV文件2加载到DataFrame
df2 =pd.read_csv(“file2.csv”)
遍历df1中的每一行
for i,row1 in df1.iterrows():
将更新后的df1保存到新的CSV文件中
df1.to_csv(“file1_flagged.csv”,index=False)