Pandas: рдмрдЧ: рдХреЙрдирдХреИрдЯ рдЕрд╡рд╛рдВрдЫрд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдЧре░ 2013  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреЙрд▓рдо рдирд╛рдо рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рд╣реЛред рдпрджрд┐ рд╡реЗ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╡реЗ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣ рдкреНрд░рдХрд╛рд░ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдиреЛ-рд╕реЙрд░реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: SQL рдореЗрдВ рдорд╛рдирдХ рдХреНрд░рдо рд╣реЛрдЧрд╛: df1 рд╕реЗ рдХреЙрд▓рдо (df1 рдореЗрдВ рд╕рдорд╛рди рдХреНрд░рдо), df2 рд╕реЗ рдХреЙрд▓рдо (рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ) (рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓рдо рдХрдо) (df2 рдореЗрдВ рд╕рдорд╛рди рдХреНрд░рдо)ред рдЙрджрд╛рд╣рд░рдг:

df4a = DataFrame(columns=['C','B','D','A'], data=np.random.randn(3,4))
df4b = DataFrame(columns=['C','B','D','A'], data=np.random.randn(3,4))
df5  = DataFrame(columns=['C','B','E','D','A'], data=np.random.randn(3,5))

print "Cols unsorted:", concat([df4a,df4b])
# Cols unsorted:           C         B         D         A

print "Cols sorted", concat([df4a,df5])
# Cols sorted           A         B         C         D         E
``'
API Design Reshaping

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

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдФрд░ рдореИрдВ рднреА рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред

 >>> df = pd.DataFrame()

>>> df['b'] = [1,2,3]
>>> df['c'] = [1,2,3]
>>> df['a'] = [1,2,3]
>>> print(df)
   b  c  a
0  1  1  1
1  2  2  2
2  3  3  3

[3 rows x 3 columns]
>>> df2 = pd.DataFrame({'a':[4,5]})
>>> df3 = pd.concat([df, df2])

рднреЛрд▓реЗрдкрди рд╕реЗ рдХреЛрдИ рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕реНрддрдВрднреЛрдВ рдХрд╛ рдХреНрд░рдо рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓рдо рдХреНрд░рдордмрджреНрдз рд╣реИрдВ:

>>> print(df3)
   a   b   c
0  1   1   1
1  2   2   2
2  3   3   3
0  4 NaN NaN
1  5 NaN NaN

[5 rows x 3 columns]

рдЗрд╕реЗ рдореВрд▓ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреБрди: рдЕрдиреБрдХреНрд░рдордгрд┐рдд рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

>>> df4 = df3.reindex_axis(df.columns, axis=1)
>>> print(df4)
    b   c  a
0   1   1  1
1   2   2  2
2   3   3  3
0 NaN NaN  4
1 NaN NaN  5

[5 rows x 3 columns]

рдлрд┐рд░ рднреА рдпрд╣ рдкреНрд░рддрд┐-рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЫрдБрдЯрд╛рдИ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВ _think_ рдпрд╣ Index.intersection рд╕реЗ рдЙрдкрдЬрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╣рддрд╛ рд╣реИ:

рджреЛ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреА рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ/рдХреНрд░рдордмрджреНрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдХреЙрд▓рдо рдмрд░рд╛рдмрд░ рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдореЗрдВ) рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...

@smcierney рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдХрд┐рд╕ рдЖрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ?

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдСрдЯреЛ рд╕реЙрд░реНрдЯ рднреА рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ (рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд▓реВрдк рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░реЗрдо рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдирд╛)ред рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░рд╛ рдХреЙрд▓рдо рдСрд░реНрдбрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЕрдХреНрд╖ = 1 рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝ рд░рд╣реЗ рд╣реИрдВред

@smcinerney рдХреЗ рд╕рдорд╛рди рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ "рд╣реИрдХ" рд▓рд┐рдЦрд╛ (рдереЛрдбрд╝реЗ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣рд╛рд▓рд╛рдВрдХрд┐)

рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ = pd.concat (рдлреНрд░реЗрдорд▓рд┐рд╕реНрдЯ, рдЕрдХреНрд╖ = рдЕрдХреНрд╖, рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ = рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ, join_axes = join_axes, рдЕрдирджреЗрдЦрд╛_рдЗрдВрдбреЗрдХреНрд╕ = рдЧрд▓рдд, рдХреБрдВрдЬрд┐рдпрд╛рдБ = рдХреЛрдИ рдирд╣реАрдВ, рд╕реНрддрд░ = рдХреЛрдИ рдирд╣реАрдВ, рдирд╛рдо = рдХреЛрдИ рдирд╣реАрдВ, рд╕рддреНрдпрд╛рдкрд┐рдд_рдЕрдЦрдВрдбрддрд╛ = рдЧрд▓рдд)

if join_axes:
    return sorted
elif sort:
    return sorted
else:
    # expand all original orders in each frame
    sourceOrder = []
    for frame in frameList:
        sourceOrder.extend(frame.Columns()) if axis == 0 else sourceOrder.extend(frame.Indices())
    sortedOrder = sorted.Columns() if axis == 0 else sorted.Indices()

    positions = []
    positionsSorted = []
    for i in sortedOrder:
        positions.append(sourceOrder.index(i))
        positionsSorted.append(sourceOrder.index(i))
    positionsSorted.sort()

    unsortedOrder = []
    for i in positionsSorted:
        unsortedOrder.append(sortedOrder[positions.index(i)])

    return sorted.ReorderCols(unsortedOrder) if axis == 0 else sorted.ReorderRows(unsortedOrder)

рд╕рдорд╛рд░реЛрд╣ рдХреБрдВрдЧрдлреВ рдирд╛рдордХ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ! рдХреЛрдИ рднреА рдЙрдкрд░реЛрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдЕрдкрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ https://github.com/jerryzhujian9/kungfu рдкрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЗрд╕ рдорд╣рд╛рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЗ рдХрд╛рдо рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдФрд░ рдореИрдВ рднреА рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред

 >>> df = pd.DataFrame()

>>> df['b'] = [1,2,3]
>>> df['c'] = [1,2,3]
>>> df['a'] = [1,2,3]
>>> print(df)
   b  c  a
0  1  1  1
1  2  2  2
2  3  3  3

[3 rows x 3 columns]
>>> df2 = pd.DataFrame({'a':[4,5]})
>>> df3 = pd.concat([df, df2])

рднреЛрд▓реЗрдкрди рд╕реЗ рдХреЛрдИ рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕реНрддрдВрднреЛрдВ рдХрд╛ рдХреНрд░рдо рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓рдо рдХреНрд░рдордмрджреНрдз рд╣реИрдВ:

>>> print(df3)
   a   b   c
0  1   1   1
1  2   2   2
2  3   3   3
0  4 NaN NaN
1  5 NaN NaN

[5 rows x 3 columns]

рдЗрд╕реЗ рдореВрд▓ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреБрди: рдЕрдиреБрдХреНрд░рдордгрд┐рдд рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

>>> df4 = df3.reindex_axis(df.columns, axis=1)
>>> print(df4)
    b   c  a
0   1   1  1
1   2   2  2
2   3   3  3
0 NaN NaN  4
1 NaN NaN  5

[5 rows x 3 columns]

рдлрд┐рд░ рднреА рдпрд╣ рдкреНрд░рддрд┐-рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЫрдБрдЯрд╛рдИ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рдЗрд╕ рдкрд░ рднреА рдЖрдпрд╛ рд╣реВрдВред

new_data = pd.concat([churn_data, numerical_data])

рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛:

     churn  Var1  Var10  Var100  Var101 
0      -1   NaN    NaN     NaN     NaN     
1      -1   NaN    NaN     NaN     NaN

рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рдкрд╣рд▓реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ !!

рдареАрдХ рд╣реИ, рдпрд╣ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрд╛рдо рд╣реИред рд▓реЗрдХрд┐рди рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛!

рдмрд╕ рдЗрд╕реА рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рдЬрдм рдореИрдВ DataFrames рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдЙрдкрд╛рдп рд╣реИ:

рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ dfs рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ DataFrames рдЖрдк CONCATENATE рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рдореВрд▓ рд╕реНрддрдВрдн рдХреНрд░рдо рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдлрд╝реАрдб рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

df = pd.concat(dfs, axis=0)
df = df[dfs[0].columns]

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ append рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, FYI рдХрд░реЗрдВ

рдпрд╣ рдмреЛрд░реНрдб рднрд░ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди, f, рдХреЛ рдПрдХ groupby () рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрд▓рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рджреГрд╢реНрдп рдХреЗ рдкреАрдЫреЗ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрдпреЛрдЬрди рднреА рдХреЙрд▓рдо рдХреЛ рдСрдЯреЛ-рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

df.groupby(some_ts).apply(f)

рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╕реНрддрдВрднреЛрдВ рдХрд╛ рдЬреНрдЮрд╛рдд рдХреНрд░рдо рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдорд▓реНрдЯреАрдЗрдВрдбрд┐рд╕реЗрд╕ рдФрд░ рдорд▓реНрдЯреАрдЗрдВрдбрд┐рд╕реЗрд╕ рдореЗрдВ рд╕рднреА рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реЛрддрд╛ рд╣реИред рддреЛ рдЖрдк рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рд╕рдорддрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрддрд░ 0 рдХреЙрд▓рдо рдФрд░ рд╕рднреА рдмрд╛рд░ рдПрдХ рд╕реНрддрд░ 1 рдХреЙрд▓рдо рдкрд░ рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдорд▓реНрдЯреАрдЗрдВрдбрд┐рд╕ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЛ рдПрдХ рд╕реНрддрд░ 0 рдХреЙрд▓рдо рдХреЗ рднреАрддрд░ рдПрдХ рдмреЗрдореЗрд▓ рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡рдд: рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рдореБрдЭреЗ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдореЗрд░реА рдХреНрд╖рдорддрд╛ рд╕реЗ рдкрд░реЗ рд╣реИред рд╕рднреА рдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1

рд╕рд╣рдордд, +1ред рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЫрдБрдЯрд╛рдИ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд░ рд╕рдордп рд╣реЛрддреА рд╣реИред

+1, рдпрд╣ рдПрдХ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдерд╛!

+1, рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ append рдмрд╛рдж рдХреЙрд▓рдо рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИред

рдореЗрд░реА рддрд░рдл рд╕реЗ рднреА +1ред

рдХреНрдпреЛрдВрдХрд┐ рднрд▓реЗ рд╣реА рдореИрдВ рдПрдХ рдХреЙрдиреНрд╕реИрдЯ рдХреЗ рдмрд╛рдж рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдСрд░реНрдбрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореЗрдВ 60 + рдХреЙрд▓рдо рдирд╛рдо рдФрд░ рдкрджреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:

 for id, value in enumerate(df.columns):
      print id, value

рд╕рднреА 60+ рдХреЙрд▓рдо рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдореЗрдВ рдЙрдирдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВред

рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрднреА рднреА рд╕рдорд╡рд░реНрддреА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ 60 рд╕реНрддрдВрднреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЙрдЪред

рдЬрдмрдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рд╣реВрдВ, рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЙрд▓рдо рдирд╛рдо рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1, рдмрд╕ рдЙрд╕реА рд╕реМрджреЗ рдореЗрдВ рдЦреБрдж рднрд╛рдЧ рдЧрдпрд╛ред

@summerela рдХреЙрд▓рдо рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдореВрд▓ рдХреЙрд▓рдо рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдирдП

# assuming you have two dataframes, `df_train` & `df_test` (with the same columns) 
# that you want to concatenate

# get the columns from one of them
all_columns = df_train.columns

# concatenate them
df_concat = pd.concat([df_train,
                       df_test])

# finally, re-index the new dataframe using the original column index
df_concat = df_concat.ix[:, all_columns]

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдХреЛ рдкреБрди: рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХреЙрд▓рдо рдХреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреВрд░реНрд╡ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж рдХрд┐рддрдиреЗ рдХреЙрд▓рдо рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╢реВрдиреНрдп-рднрд┐рдиреНрдирддрд╛ рд╡рд╛рд▓реЗ рдХреЙрд▓рдо рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ), рдЖрдк рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ new_indices -> new_indices = [-1] рдФрд░ рдпрд╣ рдмрд╛рдХреА рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦреЗрдЧрд╛ред

def reindex_columns(dframe=None, columns=None, new_indices=None):
    """
    Reorders the columns of a dataframe as specified by
    `reorder_indices`. Values of `columns` should align with their
    respective values in `new_indices`.

    `dframe`: pandas dataframe.

    `columns`: list,pandas.core.index.Index, or numpy array; columns to
    reindex.

    `reorder_indices`: list of integers or numpy array; indices
    corresponding to where each column should be inserted during
    re-indexing.
    """
    print("Re-indexing columns.")
    try:
        df = dframe.copy()

        # ensure parameters are of correct type and length
        assert isinstance(columns, (pd.core.index.Index,
                                    list,
                                    np.array)),\
        "`columns` must be of type `pandas.core.index.Index` or `list`"

        assert isinstance(new_indices,
                          list),\
        "`reorder_indices` must be of type `list`"

        assert len(columns) == len(new_indices),\
        "Length of `columns` and `reorder_indices` must be equal"

        # check for negative values in `new_indices`
        if any(idx < 0 for idx in new_indices):

            # get a list of the negative values
            negatives = [value for value
                         in new_indices
                         if value < 0]

            # find the index location for each negative value in
            # `new_indices`
            negative_idx_locations = [new_indices.index(negative)
                                      for negative in negatives]

            # zip the lists
            negative_zipped = list(zip(negative_idx_locations,
                                       negatives))

            # replace the negatives in `new_indices` with their
            # absolute position in the index
            for idx, negative in negative_zipped:
                new_indices[idx] = df.columns.get_loc(df.columns[
                                                          negative])

        # re-order the index now
        # get all columns
        all_columns = df.columns

        # drop the columns that need to be re-indexed
        all_columns = all_columns.drop(columns)

        # now re-insert them at the specified locations
        zipped_columns = list(zip(new_indices,
                                  columns))

        for idx, column in zipped_columns:
            all_columns = all_columns.insert(idx,
                                             column)
        # re-index the dataframe
        df = df.ix[:, all_columns]

        print("Successfully re-indexed dataframe.")

    except Exception as e:
        print(e)
        print("Could not re-index columns. Something went wrong.")

    return df

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

# move 'Column_1' to the end, move 'Column_2' to the beginning
df = reindex_columns(dframe=df,
                     columns=['Column_1', 'Column_2'],
                     new_indices=[-1, 0])

рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ (0.13.1 рдХреЗ рд╕рд╛рде) рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓рдо рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХрд╛ рд╕рдВрдпреЛрдЬрдиред рд╕реНрддрдВрдн рдирд╛рдореЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛:

dat = pd.concat([out_dust, in_dust, in_air, out_air])
dat.columns = [out_dust.columns + in_dust.columns + in_air.columns + out_air.columns]

рдХреЙрд▓рдо рдЕрднреА рднреА рдХреНрд░рдордмрджреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдордзреНрдпрд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╣рд▓ рдХреА рдЧрдИ рдЪреАрдЬреЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрд╛рдд рдХреА ..


рдЕрдиреБрд╡рд░реНрддреА: fwiw, рд╕реНрддрдВрдн рдХреНрд░рдо рдХреЛ рдПрдХрд╡рдЪрди рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЬрдВрдЬреАрд░ .join рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

df1.join([df2, df3]) # sorts columns
df1.join(df2).join(df3) # column order retained

рдХреЙрд▓рдо рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдмрдирд╛рддреЗ рд╕рдордп рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЖрджреЗрд╢ рдХреА рддрд░рд╣ = рдЭреВрдард╛ред рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдмрдирд╛рддреЗ рд╕рдордп рдмрд╕ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛, рдкреНрд░рддрд┐рд╡рд╛рдж рдХрд┐рдпрд╛ рдФрд░ рдореЗрд░реЗ рдкреВрд░реЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджрд┐рдпрд╛ ...

рдХреЙрд▓рдо рдирд╛рдо рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкрд╛рд╕ рдХреЙрд▓рдо рдХрд╛ рд╕реНрдерд╛рди рд╕реБрд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдПрдХ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдкрд╕рдВрдж рд╣реИ

@patricktokeeffe
рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП join рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡рд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛:

def concat_fixed(ndframe_seq, **kwargs):
    """Like pd.concat but fixes the ordering problem.

    Converts Series objects to DataFrames to access join method
    Use kwargs to pass through to repeated join method
    """
    indframe_seq = iter(ndframe_seq)
    # Use the first ndframe object as the base for the final
    final_df = pd.DataFrame(next(indframe_seq))
    for dataframe in indframe_seq:
        if isinstance(dataframe, pd.Series):
            dataframe = pd.DataFrame(dataframe)
        # Iteratively build final table
        final_df = final_df.join(dataframe, **kwargs)
    return final_df

рдЗрд╕ рдкрд░ рджрдХреНрд╖рддрд╛ рдХреИрд╕реА рд╣реИ?

рдмреБрдзрд╡рд╛рд░, 30 рдЕрдЧрд╕реНрдд, 2017 рджреЛрдкрд╣рд░ 1:58 рдмрдЬреЗ, рдмреНрд░рд╛рдЗрд╕ рдЧреБрдВрдЯрд╛ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@patricktokeeffe https://github.com/patricktokeeffe
рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡рд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛:

def concat_fixed (ndframe_seq, **kwargs):
"""pd.concat рдХреА рддрд░рд╣ рд▓реЗрдХрд┐рди рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

Converts Series objects to DataFrames to access join method
Use kwargs to pass through to repeated join method
"""
indframe_seq = iter(ndframe_seq)
# Use the first ndframe object as the base for the final
final_df = pd.DataFrame(next(indframe_seq))
for dataframe in indframe_seq:
    if isinstance(dataframe, pd.Series):
        # Convert Series objects into DataFrames since
        # series objects do not have a join method
        dataframe = pd.DataFrame(dataframe)
    # Iteratively build final table
    final_df = final_df.join(dataframe, **kwargs)
return final_df

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pandas-dev/pandas/issues/4588#issuecomment-326086636 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AG999MucF-NH5vHuKe-Zczq-jy9ziYkRks5sdbDogaJpZM4A6TeA
.

@рдорд╛рдЗрдХрдЯреИрдо1021

рдореИрдВ рдЗрд╕реЗ рдПрдЯреАрдПрдо рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдПрдирдбреАрдлреНрд░реЗрдо рдХреЗ рдЖрдХрд╛рд░, рдЙрдирдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ ndframe рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ pd.concat рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХреБрд╢рд▓ рд╣реИред

рдпрд╣ рдореЗрд░реА рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ ndframes (1 рд▓рдЧрднрдЧ 10) рдФрд░ рдХреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреА рд░рд╛рд╢рд┐ records рдкреНрд░рддреНрдпреЗрдХ ndframe (2 рдЪрд╛рд░реЛрдВ рдУрд░ 10) рдХреЗ рд▓рд┐рдПред

рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЙрди рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рд╕реЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╕рднреА ndframes рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рди рд╣реЛред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдХреЙрд▓рдо рдСрд░реНрдбрд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ) рдХреЙрдиреНрд╕реИрдЯ() рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди unique_everseen Itertools Recipes рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

columns = unique_everseen([column for df in dfs for column in df.columns])
df = pd.concat(dfs)[columns]

рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 0.22.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрднреА рднреА рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд╡рд┐рд▓рдВрдм рдпрд╣рд╛рдБ рдХрд╛рдлреА рдПрдХ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ...

рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЙрд▓рдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА axis=1 , рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп:

>>> df4a = DataFrame(columns=['C','B','D','A'], data=np.random.randn(3,4))
>>> df4b = DataFrame(columns=['C','B','D','A'], data=np.random.randn(3,4))
>>> df5  = DataFrame(columns=['C','B','E','D','A'], data=np.random.randn(3, 5))

>>> pd.concat([df4a, df5], axis=1).columns
Index(['C', 'B', 'D', 'A', 'C', 'B', 'E', 'D', 'A'], dtype='object')
>>> pd.concat({'df4a': df4a, 'df4b': df4b}, axis=1).columns.levels
FrozenList([['df4a', 'df4b'], ['C', 'B', 'D', 'A']])
>>> pd.concat({'df4a': df4a, 'df5': df5}, axis=1).columns.levels
FrozenList([['df4a', 'df5'], ['A', 'B', 'C', 'D', 'E']])

рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдЕрднреА рднреА рдЦреБрд▓рд╛ред

рд╡рд┐рд▓рдВрдм рдпрд╣рд╛рдБ рдХрд╛рдлреА рдПрдХ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ...

рдЯрд╛рд▓рдордЯреЛрд▓? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЦреБрд▓реЗ рдореБрджреНрджреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдареАрдХ рд╣реЛ рдЬрд╛рдП рддреЛ рдЖрдк рдПрдХ рдкреАрдЖрд░ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╢рд░реНрдд рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдЪрд╛рд╣рд┐рдП рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред

@jtratner : рдпрджрд┐ рдпрд╣ рд╢реАрд░реНрд╖ рдкрд░ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, рддреЛ рдореИрдВ рдЖрджреЗрд╢ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ:

  • рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдо, рдмрд┐рдирд╛ рдХреНрд░рдо рдХреЗ
  • df1 рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓рдо, рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ (рдЕрд░реНрдерд╛рдд рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ df1 рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ)
  • df2 рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрд▓рдо, рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ (рдЕрд░реНрдерд╛рдд рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ df2 рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ)

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдпрд╛ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреИрд╕реЗ SQLред рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗрдВред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, 2 рдЪреАрдЬреЗрдВред 1) рдкрд╛рдВрдбрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЕрдЬрдЧрд░ рджреЗрд╢реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдЬрдЧрд░ (рдпрд╛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛) рдХреЛ SQL рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВред 2) рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЛрдб рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рд╣реИред рдЖрдк рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЗрд╕реЗ рдЕрдкрдиреЗ рдКрдкрд░ рдирд╣реАрдВ рд▓реЗрддрд╛ред

@ рдорд╛рдЗрдХрдЯреИрдо 1021 рдХреГрдкрдпрд╛ рдмрддрд╛рдПрдВ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕реЗ рдХреИрд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд▓реЛрдЧ рдареАрдХ рдпрд╣реА рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдКрдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдорд╛рдЗрдХрдЯреИрдо 1021 рдпрд╣ рдкрд╛рдВрдбрд╛ рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рд╕реНрд╡рд░реНрдЧ рди рдХрд░реЗ!), рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛:

рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗрдВред

рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рдЬреЛрдбрд╝рдирд╛ "рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛" рдЬреИрд╕рд╛ рд╣реА рдкреНрд░рднрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╕реНрдордп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рднреА рдорд╛рдирддрд╛ рд╣реИ, рдЬреЛ SQLish рд╣реИ, рди рдХрд┐ рд╢реБрджреНрдз рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рдиред рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╣реИрдВред

рдпрд╣ рдФрд░ рдХрдИ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдЕрдм рдкрд╛рдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдирд╛рдпрд╛ рд╣реИред

рдЗрд╕ рдкрд░ +1

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

cols = list(df1)+list(df2)
df1 = pd.concat([df1, df2])
df1 = df1.loc[:, cols]

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрддрд┐рдпрд╛ рдмрдирдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреИрдЪ рдХреИрд╕реЗ рд▓реБрдврд╝рдХрд╛ рд╣реИред рдЖрдкрдиреЗ рдПрдХ рд╕рд╛рде concat рдХреЗ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдкреЗрд╢ рдХреА рд╣реИред рд╕рднреА рдПрдХ рд╣реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рднреАрддрд░ред

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

рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╛рдВрдбрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рдпрджрд┐ рдЖрдк рдЫрдБрдЯрд╛рдИ рдХреНрд╖рдорддрд╛ 0.23 рдкрд░ рд░рдЦрддреЗ, рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХреБрдЫ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рддреЗред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджрд░реНрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рд╕рднреА рддреИрдирд╛рддреА рдХреЛ рдирд╡реАрдирддрдо рдХреЛрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░
рдбреНрд░реЙрдк рдХрд░реЗрдВ рдХрд┐ рдЬрдм рд╕рднреА рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд╣реА рд╕рд╣реА рд╣реИ?

рдЧреБрд░реБ, 4 рдЕрдХреНрдЯреВрдмрд░, 2018 рдХреЛ рд╕реБрдмрд╣ 9:18 рдмрдЬреЗ рдбреЗрд╡рд┐рдбрдПрд╕реНрдХреЙрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрддрд┐рдпрд╛ рдмрдирдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреИрдЪ рдХреИрд╕реЗ рд▓реБрдврд╝рдХрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕
рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЙрдирдХреИрдЯ рдХреЗ рдлрдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ a
рдЙрдкрдпреЛрдЧ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреАред рд╕рднреА рдПрдХ рд╣реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рднреАрддрд░ред

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

рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛
рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛
рдкрдВрдбреЛрдВ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ред

рдпрджрд┐ рдЖрдк рдЫрдБрдЯрд╛рдИ рдХреНрд╖рдорддрд╛ рдХреЛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛
0.23, рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХреБрдЫ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдореБрдЭреЗ рдЗрд╕рдХрд╛ рджрд░реНрдж рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рд╕рднреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдирд╡реАрдирддрдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрдиред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЦреБрд▓реА/рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pandas-dev/pandas/issues/4588#issuecomment-427036391 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABQHItEhYfv5kqB-R-pDX4zyIh45hF7kks5uhhiWgaJpZM4A6TeA
.

@TomAugspurger рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╣рдо рдЕрдкрдиреА рддрд░рдл рд╕реЗ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдПрдХ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдлрд┐рд▓реНрдЯрд░ рдереЛрдбрд╝реЗ рдмрджрд╕реВрд░рдд рд╣реИрдВ ...

  1. рдореБрдЭреЗ рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
  2. рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ:

    • рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд▓рд┐рдиреЗрдиреЛ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ,

    • рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдФрд░ FutureWarning рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдкрд╛рдВрдбрд╛ рд╕реЗ рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА рдФрд░ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдЧрд╛,

    • рдпрд╛ рдореИрдВ рдЖрдкрдХреЗ рд▓рдВрдмреЗ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕рдВрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

  3. рдФрд░ рдлрд┐рд░ рдЙрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ рдЬрдм рд╕рдм рдХреБрдЫ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдЕрдм рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ warnings рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдорд┐рдпрд╛рдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдореИрдВ рдкрд╛рдВрдбрд╛ рдЯреАрдо рдХреЗ рдкреИрд░ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рди рд╣реА рдпрд╣ рдЖрдкрдХреА рдЧрд▓рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рд░реНрд╡рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рджреВрд╕рд░реА рдЪреАрдЬ рд╣реЛрдЧреА рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдмрд╕ рд╕рднреА рд▓рд╛рдирдд рддреИрдирд╛рддреА рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ)ред рдЕрдВрддрдд:, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд┐рддреНрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╢реНрдп рдЕрдВрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдиреЗ рдЪрд┐рдВрддрд┐рдд рдереЗ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд╣рд▓реЗ рдПрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХ рджреА рд╣реИ ... рджреЛрдиреЛрдВ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рдХреНрд░рдордмрджреНрдз рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдореЗрд░реА рдкреБрд╕реНрддрдХ рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╢реНрдп рд╡реНрдпрд╡рд╣рд╛рд░" рдХрд╛ рдЧрдарди рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрдВрднреАрд░рддрд╛ рдХрд╛ред

рдореИрдВрдиреЗ SO рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИред

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

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

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

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

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

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

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