Pandas: рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдкрдВрдХреНрддрд┐ рдкрд░ рдкрдВрдХреНрддрд┐ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЬреВрди 2015  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди df.iterrows() рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднрдпрд╛рдирдХ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ iterrows() Series рдкреВрд░реНрдг

рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдЬреЛ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд╡рд╣ for row in df.values , рдЬреЛ рдХрд┐ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ df.values DataFrame рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ df.values рд╕рднреА dtypes рдХреЛ рдПрдХ рдЖрдо dtype рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдПрдХ рдХреЙрд▓рдо рдореЗрдВ int64 рдХрд╛ dtype рд╣реИ рд▓реЗрдХрд┐рди df.values рдХрд╛ dtype рд╕рднреА float64 ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ df.values рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЙрди рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдП, рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдореВрд▓ dtype рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ df.itertuples() рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдк рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ - рдпрд╣ рдЗрдЯреНрд░реЛрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ:

In [10]: x = pd.DataFrame({'x': range(10000)})

In [11]: %timeit list(x.iterrows())
1 loops, best of 3: 383 ms per loop

In [12]: %timeit list(x.itertuples())
1000 loops, best of 3: 1.39 ms per loop

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЬрдЧрд░ рдореЗрдВ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ (рдмрд╣реБрдд) рд╕рджрд┐рд╢ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореАред

рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЦрд╕реНрддрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рд╣реИ (рдЬреЛ рдХрд┐ df.values рд╣реИ) рдХрд╛рдо рд╣реИред DataFrames рд╕реНрддрдВрдн рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ dtypes рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓ DataFrame рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдкрдВрдХреНрддрд┐-рд╡рд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд░рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рд░рдЦрддреА рд╣реИред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪреАрдВрдЯрд┐рдпрд╛рдБ float64 ред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрдо рд╕реЗ рдХрдо рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдкрд╛рдВрдбрд╛ рдЯреИрдЧ рдХреЗ рд╕рд╛рде StackOverflow рдкрд░ рдХрд┐рд╕реНрдордд рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

row_handler = RowHandler(sample_df)  # learn how to handle row from sample data
transformed_data = []
for row in df.values:
    transformed_data.append(row_handler.handle(row))
return transformed_data

рдореИрдВ RowHandler рд╡рд░реНрдЧ рдХрд╛ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЗрдВ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ рд╕реНрддрд░ рдкрд░ рдПрдкреАрдЖрдИ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИред

рдлрд┐рд░ рднреА рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ RowHandler рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рддреЛ рдЖрдк рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХреЗ рд╕рднреА рдПрдкреАрдЖрдИ рд╕рд░рдгрд┐рдпреЛрдВ (рдЗрд╕рд▓рд┐рдП рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ) рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, RowHandler рдореЗрд░реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рднрд╛рдЧреНрдп рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ dtype рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддреЗ рд╣реБрдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдХреНрдпрд╛ рдЖрдк df.iterrows() , рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реБрдЭрд╛ рд░рд╣реЗ рд╣реИрдВ?

sklearn рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ, рдЖрджрд░реНрд╢ рдирд╣реАрдВ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ PD рдХреЗ DataFrame рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдмрд╣реБрдд рд╕реЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ API рдирд╣реАрдВ рд╣реИ рдЬреЛ DataFrame рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ df.itertuples() рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдк рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ - рдпрд╣ рдЗрдЯреНрд░реЛрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ:

In [10]: x = pd.DataFrame({'x': range(10000)})

In [11]: %timeit list(x.iterrows())
1 loops, best of 3: 383 ms per loop

In [12]: %timeit list(x.itertuples())
1000 loops, best of 3: 1.39 ms per loop

рдзрдиреНрдпрд╡рд╛рдж @shoyer! рдореБрдЭреЗ рдЗрд╕реА рдХреА рдЬрд░реВрд░рдд рдереАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

andreas-thomik picture andreas-thomik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hiiwave picture hiiwave  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marcelnem picture marcelnem  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amelio-vazquez-reina picture amelio-vazquez-reina  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jaradc picture jaradc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ