【问题标题】:Use Pandas to grab certain rows and certain columns from a CSV使用 Pandas 从 CSV 中获取某些行和某些列
【发布时间】:2020-11-14 00:16:24
【问题描述】:

我将如何查找列中的特定值,然后在 pandas 中选择该行中列值的子集?

我有一个 CSV,其中有一列包含美国各州名称和各州属性的列,但我只需要有关我正在查找的州的某些值。

例如,有 50 行(针对 50 个州)和 20 列包含有关每个州的各种数据,我想选择科罗拉多州和佛罗里达州,而这些州只有 5 个列值。

这是我要修改的代码:

import glob
import pandas as pd
import os
import csv
 
myList = []
 
path = "/path/to/source/files/*.csv"
 
for fname in glob.glob(path):
    df = pd.read_csv(fname)
    row = df.loc[df['Province_State'] == 'Pennsylvania']
 
    # Put the date in, derived from the CSV name
    dateFromFilename = os.path.basename(fname).replace('.csv','')
    row['Date'] = dateFromFilename
 
    myList.append(row)
    print(row)
 
concatList = pd.concat(myList, sort=True)
 
concatList.to_csv('/path/to/output.csv', index=False, header=True)

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    您只需要使用isin 并将列列表传递给loc:

    myList = []
    
    path = "/path/to/source/files/*.csv"
    
    col_lists = ['col1','col2','col3']
     
    for fname in glob.glob(path):
        df = pd.read_csv(fname)
    
        # changes here
        row = df.loc[df['Province_State'].isin('Florida', 'Colorado'),
                     col_list]
    
        # pivot
        row = (row.assign(idx=row.groupby('Province_State').cumcount()).     
                  .pivot(index='idx', columns='Province_State')
              )
        # rename
        row.columns = [f'{x}_{y}' for x,y in row.columns]          
    
        # Put the date in, derived from the CSV name
        dateFromFilename = os.path.basename(fname).replace('.csv','')
        row['Date'] = dateFromFilename
     
        myList.append(row)
        print(row)
     
    concatList = pd.concat(myList, sort=True)
    

    【讨论】:

    • 如何在抓取列时重命名它们?因为我最终会为每个州提供两个col1s。我需要以Florida_col1、Colorado_col1 等结尾。
    • 我认为这里有一个语法错误,我已修复:row = (row.assign(idx=row.groupby('Province_State').cumcount()).pivot(index='idx', columns='Province_State') 但我仍然在这里遇到一个,我不明白:row.columns = [f'{x}_{y}' for x,y in row.columns]
    • 在row 行之前有两级列。有关详细信息,请参阅this thread 中的问题/答案 10/11。
    • 所以我需要用实际的列名替换x,y?
    • 不,这就是 for 循环的用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2018-10-21
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多