Фрейм данных из переменных и данных фильтрации

#python #python-3.x #pandas

Вопрос:

У меня есть DataFrame и я хочу извлечь из него 3 столбца, но один из них-это ввод от пользователя. Я составил список, но мне нужно, чтобы он был повторяемым, чтобы я мог выполнить повторение. До сих пор я справлялся с этим, составляя словарь с 2 столбцами, составляя список каждого из них и пролистывая их… но мне действительно нужны 3 колонки…

Мой код:

 Data=pd.read_csv(----------)
selec=input("What month would you want to show?")
NewData=[(Data['Country']),(Data['City']),(Data[selec].astype('int64')]

#here I try to iterate:
iteration=[i for i in NewData if NewData[i]<=25] 
print (iteration)
*TypeError:list indices must be int ot slices, not Series*
 

Мой CSV-файл выглядит следующим образом:

Я хочу иметь возможность выбрать месяц с переменной «selec» и отфильтровать результаты выбранного мной месяца… таким образом, выход для selec="Feb" будет:

Я тоже пробовал с loc / iloc , но мне совсем не повезло (недоступный тип:»список»).

Ответ №1:

Смотрите приведенный ниже пример того, как вы можете:

  • выберите определенные столбцы из a DataFrame , предоставив список столбцов между скобками выбора (ссылка на учебник).
  • выберите определенные строки из a DataFrame , указав условие между скобками выбора (ссылка на учебник).
  • повторите строки a DataFrame , хотя я не думаю, что вам это нужно — если вы хотите продолжать работать с DataFrame ним после фильтрации, лучше использовать метод, упомянутый выше (вам не придется снова соединять строки, и он, вероятно, будет более производительным, потому pandas что оптимизирован для массовых операций)
 import pandas as pd

# this is just for testing, instead of pd.read_csv(...)
df = pd.DataFrame([
    dict(Country="Spain", City="Madrid", Jan="15", Feb="16", Mar="17", Apr="18", May=""),
    dict(Country="Spain", City="Galicia", Jan="1", Feb="2", Mar="3", Apr="4", May=""),
    dict(Country="France", City="Paris", Jan="0", Feb="2", Mar="3", Apr="4", May=""),
    dict(Country="Algeria", City="Argel", Jan="20", Feb="28", Mar="29", Apr="30", May=""),
])

print("---- Original df:")
print(df)

selec = "Feb"  # let's pretend this comes from input()

print("n---- Just the 3 columns:")
df = df[["Country", "City", selec]]  # narrow down the df to just the 3 columns
df[selec] = df[selec].astype("int64")  # convert the selec column to proper type
print(df)

print("n---- Filtered dataframe:")
df1 = df[df[selec] <= 25]
print(df1)

print("n---- Iterated amp; filtered rows:")
for row in df.itertuples():
    # we could also use row[3] instead of getattr(...)
    if getattr(row, selec) <= 25:
        print(row)
 

Выход:

 ---- Original df:
   Country     City Jan Feb Mar Apr May
0    Spain   Madrid  15  16  17  18
1    Spain  Galicia   1   2   3   4
2   France    Paris   0   2   3   4
3  Algeria    Argel  20  28  29  30

---- Just the 3 columns:
   Country     City  Feb
0    Spain   Madrid   16
1    Spain  Galicia    2
2   France    Paris    2
3  Algeria    Argel   28

---- Filtered dataframe:
  Country     City  Feb
0   Spain   Madrid   16
1   Spain  Galicia    2
2  France    Paris    2

---- Iterated amp; filtered dataframe:
Pandas(Index=0, Country='Spain', City='Madrid', Feb=16)
Pandas(Index=1, Country='Spain', City='Galicia', Feb=2)
Pandas(Index=2, Country='France', City='Paris', Feb=2)