在包含大量数据的 csv 文件上创建用户输入过滤器

Creating a user-input filters on csv file that contains large data

我有一个程序可以打开和读取包含大量数据的 csv 格式文件,例如:

State      Crime type Occurrences Year 

CALIFORNIA ROBBERY    12          1999
CALIFORNIA ASSAULT    45          2003
NEW YORK   ARSON      9           1999
CALIFORNIA ARSON      21          2000
TEXAS      THEFT      30          2000
OREGON     ASSAULT    10          2001

我需要根据用户输入创建 3 个过滤器。例如:

Enter State:
Enter Crime Type:
Enter Year:

如果我输入:

Enter State: CALIFORNIA
Enter Crime: ASSAULT
Enter Year:  2003

Crime Report
State      Crime type Occurrences Year
CALIFORNIA ASSAULT    45          2003

这需要发生。

我不知道如何解决这个问题。我只能打开 csv 格式的数据文件并将其读取到 Python 中的 table 中,它会打印出每个线。但是,我需要结合搜索过滤器来缩小结果,如上所示。有人熟悉这个吗?谢谢大家的帮助。

Python 中的 Pandas 库允许您查看和操作 csv 数据。以下解决方案导入 pandas 库,使用 read_csv() 函数读取 csv 并将其加载到数据框中,然后请求输入值,请记住 State 和 Crime 应该是字符串值并转换为str 和 Year 应该是整数并转换为 int,然后应用一个简单的查询来从数据框中过滤您需要的结果。我们构建此查询时牢记应满足所有三个条件并且输入字符串也可以是小写。

In [125]: import pandas as pd
In [126]: df = pd.read_csv('test.csv')

In [127]: df
Out[127]:
        State Crime type  Occurrences  Year
0  CALIFORNIA    ROBBERY           12  1999
1  CALIFORNIA    ASSAULT           45  2003
2    NEW YORK      ARSON            9  1999

In [128]: state = str(input("Enter State: "))
Enter State: California

In [129]: crime_type = str(input("Enter Crime Type: "))
Enter Crime Type: robbery

In [130]: year = int(input("Enter Year: "))
Enter Year: 1999

In [131]: df.loc[lambda x:(x['State'].str.lower().str.contains(state.lower()))
     ...: & (x['Crime type'].str.lower().str.contains(crime_type.lower())) & (x
     ...: ['Year'] == year)]
Out[131]:
        State Crime type  Occurrences  Year
0  CALIFORNIA    ROBBERY           12  1999