#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)