【问题标题】:python Searching table/.csv from column, returning resulting rowpython从列中搜索表/ .csv,返回结果行
【发布时间】:2020-05-18 18:21:08
【问题描述】:

我在 .csv 文件中有下表:

1,123 Sesame Street,Imaginary,XL,Seven Eleven #398,,

2,124 Sesame Street,Imaginary,XL,Seven Eleven #399,,

3,125 Sesame Street,Imaginary,XL,Seven Eleven #400,,

4,126 Sesame Street,Imaginary,XL,Seven Eleven #401,,

5,127 Sesame Street,Imaginary,XL,Seven Eleven #402,,

6,128 Sesame Street,Imaginary,XL,Seven Eleven #403,,

7,129 Sesame Street,Imaginary,XL,Seven Eleven #404,,

8,130 Sesame Street,Imaginary,XL,Seven Eleven #405,,

9,131 Sesame Street,Imaginary,XL,Seven Eleven #406,,

10,132 Sesame Street,Imaginary,XL,Seven Eleven #407,,

11,133 Sesame Street,Imaginary,XL,Seven Eleven #408,,

12,134 Sesame Street,Imaginary,XL,Seven Eleven #409,,

13,135 Sesame Street,Imaginary,XL,Seven Eleven #410,,

14,136 Sesame Street,Imaginary,XL,Seven Eleven #411,,

15,137 Sesame Street,Imaginary,XL,Seven Eleven #412,,

16,138 Sesame Street,Imaginary,XL,Seven Eleven #413,,

该表分为以下列:

DeviceNumber,DeviceStreetAddress,DeviceCity,DeviceState,DeviceStoredAt,DeviceConnect,Keys

我正在尝试在表(包含数千个条目)中搜索其各自列中的某个 DeviceNumberDeviceStreetAddress。搜索应该返回包含搜索信息的整行,以便为我提供有关我正在搜索的设备的附加信息。最好以列表而不是字符串的形式返回。

我发现了一些我尝试过的代码片段,但我通常会遇到如下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid >continuation byte 要么 NameError:名称“列”未定义 等等。

在我多次将头撞到墙上并一遍又一遍地开始之后,我目前有以下代码:

import pandas as pd
df = pd.read_csv('path/to/file.csv')
dev_id = df[0] #this should theoretically give me a list of the device ids
dev_address = df[1] #this should theoretically give me a list of addresses

TBH,我什至不知道我在技术上想要做什么,或者更确切地说如何去做。如果有人能帮帮我,我将不胜感激!

【问题讨论】:

    标签: python csv search


    【解决方案1】:

    您需要通过名称来调用每列,并且需要确保在导入时设置您的列名。

    一个简单的方法是将下面的行放在csv 的顶部,因为pandas 将自动使用第一行作为列名。

    DeviceNumber,DeviceStreetAddress,DeviceCity,DeviceState,DeviceStoredAt,DeviceConnect,Keys

    然后,您可以简单地调用以下内容,这应该可以工作;

    dev_id = df['DeviceNumber']
    dev_address = df['DeviceStreetAddress']
    

    要获得您似乎正在寻找的结果,您在哪里搜索地址然后找到设备 ID,您可以定义一个 function,在其中传递 dataframe 并查询并返回结果。

    import pandas as pd
    
    df = pd.read_csv('2017.csv')
    
    
    def locate(df, query):
        result = df.loc[(df['DeviceStreetAddress'].str.lower() == query)]['DeviceNumber'].reset_index(drop=True)
    
        return result[0] if result.any() else 'Not Found'
    
    
    print(locate(df, input('Address :')))
    

    输出:

    Address :123 sesame street
    1
    >>>
    
    Address :11
    Not Found
    >>> 
    

    【讨论】:

    • 我已将标题添加到文件中并将我的代码编辑为如下:import pandas as pd df = pd.read_csv('C:/path/DataStuff.csv') dev_id = df['DeviceNumber'] dev_address = df['DeviceStreetAddress'] search_for = df.filter(input('What are you looking for? ', dev_address, dev_id)) print(search_for) 但是,我收到以下错误:TypeError: input expected at most 1 arguments, got 3 What would be同时在这两列中搜索的语法?我应该使用嵌套的“for”循环吗?我对 pandas 库不熟悉。
    • 你想达到什么目的?
    • 我在呼叫中心工作,我有各种设备的电子表格,其中包含关于这些设备的信息。当我接电话时,我会得到一个地址或一个设备号码,然后必须在电子表格中搜索正确的设备。拥有这些数据后,我还有其他需要处理的事情,但我已对其他方面进行了排序。我需要能够在某个设备上提取数据行,然后在我的程序的另一部分使用(特别是开发号)作为变量。这有意义吗?
    • 据我了解,它需要更像这样的文档:import pandas as pd df = pd.read_csv('C:/path/DataStuff.csv') #assiging columns to variables for searching dev_id = df['DeviceNumber'] dev_address = df['DeviceStreetAddress'] search_for = input('What are you looking for? ') #defining the search to go between these columns display = df.loc[search_for, dev_address:dev_id]#This should obtain the row from our search from search_for print(display) 但是,这只会出错。你明白我在说什么吗?
    • 检查我的编辑,如果您只想搜索附加到地址的结果,您可以执行该搜索。
    猜你喜欢
    • 2014-11-22
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多