Adición de una nueva columna al DataFrame existente en Python pandas


Tengo el siguiente DataFrame indexado con columnas y filas nombradas con números no continuos:

          a         b         c         d
2  0.671399  0.101208 -0.181532  0.241273
3  0.446172 -0.243316  0.051767  1.577318
5  0.614758  0.075793 -0.451460 -0.012493

Me gustaría agregar una nueva columna, 'e', al marco de datos existente y no quiero cambiar nada en el marco de datos (es decir, la nueva columna siempre tiene la misma longitud que el marco de datos).

0   -0.335485
1   -1.166658
2   -0.385571
dtype: float64

Probé diferentes versiones de join, append, merge, pero no obtuve el resultado que quería, solo errores a lo sumo. ¿Cómo puedo añadir column e al ejemplo anterior?

Author: Brad Solomon, 2012-09-23

21 answers

Utilice los índices df1 originales para crear la serie:

df1['e'] = Series(np.random.randn(sLength), index=df1.index)


Editar 2015
Algunos reportaron obtener el SettingWithCopyWarning con este código.
Sin embargo, el código sigue funcionando perfectamente con la versión actual de pandas 0.16.1.

>>> sLength = len(df1['a'])
>>> df1
          a         b         c         d
6 -0.269221 -0.026476  0.997517  1.294385
8  0.917438  0.847941  0.034235 -0.448948

>>> df1['e'] = p.Series(np.random.randn(sLength), index=df1.index)
>>> df1
          a         b         c         d         e
6 -0.269221 -0.026476  0.997517  1.294385  1.757167
8  0.917438  0.847941  0.034235 -0.448948  2.228131

>>> p.version.short_version
'0.16.1'

El SettingWithCopyWarning tiene como objetivo informar de una asignación posiblemente inválida en una copia del Dataframe. No necesariamente dice que lo hiciste mal (puede desencadenar falsos positivos), pero desde 0.13.0 te permite saber que hay métodos más adecuados para el el mismo propósito. Luego, si recibe la advertencia, simplemente siga su consejo: Intente usar .loc [row_index, col_indexer] = value instead

>>> df1.loc[:,'f'] = p.Series(np.random.randn(sLength), index=df1.index)
>>> df1
          a         b         c         d         e         f
6 -0.269221 -0.026476  0.997517  1.294385  1.757167 -0.050927
8  0.917438  0.847941  0.034235 -0.448948  2.228131  0.006109
>>> 

De hecho, este es actualmente el método más eficiente como descrito en pandas docs



Editar 2017

Como se indica en los comentarios y por @Alexander, actualmente el mejor método para agregar los valores de una Serie como una nueva columna de un DataFrame podría usar assign:

df1 = df1.assign(e=p.Series(np.random.randn(sLength)).values)
 702
Author: joaquin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-07 12:07:59

Esta es la forma sencilla de agregar una nueva columna: df['e'] = e

 151
Author: Kathirmani Sukumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-10 06:53:58

Me gustaría agregar una nueva columna, 'e', al marco de datos existente y no cambiar nada en el marco de datos. (La serie siempre tiene la misma longitud que un dataframe.)

Asumo que los valores del índice en e coinciden con los de df1.

La forma más fácil de iniciar una nueva columna llamada e, y asignarle los valores de su serie e:

df['e'] = e.values

Asignar (Pandas 0.16.0+)

A partir de Pandas 0.16.0, también puede usar assign, que asigna nuevas columnas a un DataFrame y devuelve un nuevo objeto (una copia) con todas las columnas originales además de las nuevas.

df1 = df1.assign(e=e.values)

De acuerdo con este ejemplo (que también incluye el código fuente de la función assign), también puede incluir más de una columna:

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
>>> df.assign(mean_a=df.a.mean(), mean_b=df.b.mean())
   a  b  mean_a  mean_b
0  1  3     1.5     3.5
1  2  4     1.5     3.5

En contexto con su ejemplo:

np.random.seed(0)
df1 = pd.DataFrame(np.random.randn(10, 4), columns=['a', 'b', 'c', 'd'])
mask = df1.applymap(lambda x: x <-0.7)
df1 = df1[-mask.any(axis=1)]
sLength = len(df1['a'])
e = pd.Series(np.random.randn(sLength))

>>> df1
          a         b         c         d
0  1.764052  0.400157  0.978738  2.240893
2 -0.103219  0.410599  0.144044  1.454274
3  0.761038  0.121675  0.443863  0.333674
7  1.532779  1.469359  0.154947  0.378163
9  1.230291  1.202380 -0.387327 -0.302303

>>> e
0   -1.048553
1   -1.420018
2   -1.706270
3    1.950775
4   -0.509652
dtype: float64

df1 = df1.assign(e=e.values)

>>> df1
          a         b         c         d         e
0  1.764052  0.400157  0.978738  2.240893 -1.048553
2 -0.103219  0.410599  0.144044  1.454274 -1.420018
3  0.761038  0.121675  0.443863  0.333674 -1.706270
7  1.532779  1.469359  0.154947  0.378163  1.950775
9  1.230291  1.202380 -0.387327 -0.302303 -0.509652

La descripción de esta nueva característica cuando se introdujo por primera vez se puede encontrar aquí.

 97
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:32

Hacer esto directamente a través de NumPy será el más eficiente:

df1['e'] = np.random.randn(sLength)

Tenga en cuenta que mi sugerencia original (muy antigua) era usar map (que es mucho más lento):

df1['e'] = df1['a'].map(lambda x: np.random.random())
 35
Author: Andy Hayden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 13:05:01

Parece que en las versiones recientes de Pandas el camino a seguir es usar df.asignar:

df1 = df1.assign(e=np.random.randn(sLength))

No produce SettingWithCopyWarning.

 29
Author: Mikhail Korobov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-03 07:39:25

Asignación de columna súper simple

Un dataframe pandas se implementa como un dict ordenado de columnas.

Esto significa que el __getitem__ [] no solo se puede utilizar para obtener una determinada columna, pero __setitem__ [] = se puede utilizar para asignar una nueva columna.

Por ejemplo, este dataframe puede tener una columna añadida simplemente usando el [] accessor

    size      name color
0    big      rose   red
1  small    violet  blue
2  small     tulip   red
3  small  harebell  blue

df['protected'] = ['no', 'no', 'no', 'yes']

    size      name color protected
0    big      rose   red        no
1  small    violet  blue        no
2  small     tulip   red        no
3  small  harebell  blue       yes

Tenga en cuenta que esto funciona incluso si el índice del dataframe está desactivado.

df.index = [3,2,1,0]
df['protected'] = ['no', 'no', 'no', 'yes']
    size      name color protected
3    big      rose   red        no
2  small    violet  blue        no
1  small     tulip   red        no
0  small  harebell  blue       yes

[]= es el camino a seguir, pero ¡cuidado!

Sin embargo, si tiene un pd.Series e intenta asignarlo a un dataframe donde los índices están desactivados, se encontrará con problemas. Véase el ejemplo:

df['protected'] = pd.Series(['no', 'no', 'no', 'yes'])
    size      name color protected
3    big      rose   red       yes
2  small    violet  blue        no
1  small     tulip   red        no
0  small  harebell  blue        no

Esto se debe a que a pd.Series por defecto tiene un índice enumerado de 0 a n. Y el método pandas [] = intenta para ser"inteligente"

Lo que realmente está pasando.

Cuando se utiliza el método [] = pandas está realizando silenciosamente una unión externa o fusión externa utilizando el índice de la izquierda hand dataframe y el índice de la serie de la mano derecha. df['column'] = series

Nota al margen

Esto causa rápidamente disonancia cognitiva, ya que el método []= está tratando de hacer muchas cosas diferentes dependiendo de la entrada, y el resultado no se puede predecir a menos que solo sepa cómo funciona el pandas. Por lo tanto, desaconsejaría el []= en bases de código, pero al explorar datos en un cuaderno, está bien.

Dando la vuelta al problema

Si usted tiene un pd.Series y desea que se asigne de arriba a abajo, o si está codificando código productivo y no está seguro del orden del índice, vale la pena protegerlo para este tipo de problema.

Podrías rebajar el pd.Series a un np.ndarray o a un list, esto hará el truco.

df['protected'] = pd.Series(['no', 'no', 'no', 'yes']).values

O

df['protected'] = list(pd.Series(['no', 'no', 'no', 'yes']))

Pero esto no es muy explícito.

Algún programador puede venir y decir "Oye, esto parece redundante, solo optimizaré esto".

Explícito way

Establecer el índice de la pd.Series para ser el índice de la df es explícito.

df['protected'] = pd.Series(['no', 'no', 'no', 'yes'], index=df.index)

O más realista, es probable que tenga un pd.Series ya disponible.

protected_series = pd.Series(['no', 'no', 'no', 'yes'])
protected_series.index = df.index

3     no
2     no
1     no
0    yes

Ahora se puede asignar

df['protected'] = protected_series

    size      name color protected
3    big      rose   red        no
2  small    violet  blue        no
1  small     tulip   red        no
0  small  harebell  blue       yes

Forma Alternativa con df.reset_index()

Dado que la disonancia del índice es el problema, si siente que el índice del dataframe no debería dictar las cosas, simplemente puede soltar el índice, esto debería ser más rápido, pero no es muy limpio, ya que tu función ahora probablemente hace dos cosas.

df.reset_index(drop=True)
protected_series.reset_index(drop=True)
df['protected'] = protected_series

    size      name color protected
0    big      rose   red        no
1  small    violet  blue        no
2  small     tulip   red        no
3  small  harebell  blue       yes

Nota sobre df.assign

Mientras que df.assign hacer más explícito lo que está haciendo, en realidad tiene todos los mismos problemas que los anteriores []=

df.assign(protected=pd.Series(['no', 'no', 'no', 'yes']))
    size      name color protected
3    big      rose   red       yes
2  small    violet  blue        no
1  small     tulip   red        no
0  small  harebell  blue        no

Solo ten cuidado con df.assign que tu columna no se llame self. Causará errores. Esto hace df.assign oloroso , ya que hay este tipo de artefactos en la función.

df.assign(self=pd.Series(['no', 'no', 'no', 'yes'])
TypeError: assign() got multiple values for keyword argument 'self'

Puedes decir, "Bueno, simplemente no usaré self entonces". Pero quién sabe cómo esta función cambia en el futuro para apoyar nuevos argumentos. Tal vez el nombre de su columna será un argumento en una nueva actualización de pandas, causando problemas con la actualización.

 20
Author: firelynx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-03 08:59:22

Si desea establecer toda la nueva columna en un valor base inicial (por ejemplo, None), puede hacer esto: df1['e'] = None

Esto en realidad asignaría el tipo "objeto" a la celda. Así que más tarde eres libre de poner tipos de datos complejos, como lista, en celdas individuales.

 16
Author: digdug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 20:51:00

Obtuve el temido SettingWithCopyWarning, y no se arregló usando la sintaxis iloc. Mi DataFrame fue creado por read_sql a partir de una fuente ODBC. Usando una sugerencia de lowtech anterior, lo siguiente funcionó para mí:

df.insert(len(df.columns), 'e', pd.Series(np.random.randn(sLength),  index=df.index))

Esto funcionó bien para insertar la columna al final. No se si es el más eficiente, pero no me gustan los mensajes de advertencia. Creo que hay una mejor solución, pero no puedo encontrarla, y creo que depende de algún aspecto del índice.
Nota. Que esto solo funciona una vez y dará un mensaje de error si intenta sobrescribir y columna existente.
Nota Como arriba y desde 0.16.0 asignar es la mejor solución. Ver documentación http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.assign.html#pandas.DataFrame.assign Funciona bien para el tipo de flujo de datos donde no sobrescribe sus valores intermedios.

 15
Author: hum3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-21 11:32:43

Infalible:

df.loc[:, 'NewCol'] = 'New_Val'

Ejemplo:

df = pd.DataFrame(data=np.random.randn(20, 4), columns=['A', 'B', 'C', 'D'])

df

           A         B         C         D
0  -0.761269  0.477348  1.170614  0.752714
1   1.217250 -0.930860 -0.769324 -0.408642
2  -0.619679 -1.227659 -0.259135  1.700294
3  -0.147354  0.778707  0.479145  2.284143
4  -0.529529  0.000571  0.913779  1.395894
5   2.592400  0.637253  1.441096 -0.631468
6   0.757178  0.240012 -0.553820  1.177202
7  -0.986128 -1.313843  0.788589 -0.707836
8   0.606985 -2.232903 -1.358107 -2.855494
9  -0.692013  0.671866  1.179466 -1.180351
10 -1.093707 -0.530600  0.182926 -1.296494
11 -0.143273 -0.503199 -1.328728  0.610552
12 -0.923110 -1.365890 -1.366202 -1.185999
13 -2.026832  0.273593 -0.440426 -0.627423
14 -0.054503 -0.788866 -0.228088 -0.404783
15  0.955298 -1.430019  1.434071 -0.088215
16 -0.227946  0.047462  0.373573 -0.111675
17  1.627912  0.043611  1.743403 -0.012714
18  0.693458  0.144327  0.329500 -0.655045
19  0.104425  0.037412  0.450598 -0.923387


df.drop([3, 5, 8, 10, 18], inplace=True)

df

           A         B         C         D
0  -0.761269  0.477348  1.170614  0.752714
1   1.217250 -0.930860 -0.769324 -0.408642
2  -0.619679 -1.227659 -0.259135  1.700294
4  -0.529529  0.000571  0.913779  1.395894
6   0.757178  0.240012 -0.553820  1.177202
7  -0.986128 -1.313843  0.788589 -0.707836
9  -0.692013  0.671866  1.179466 -1.180351
11 -0.143273 -0.503199 -1.328728  0.610552
12 -0.923110 -1.365890 -1.366202 -1.185999
13 -2.026832  0.273593 -0.440426 -0.627423
14 -0.054503 -0.788866 -0.228088 -0.404783
15  0.955298 -1.430019  1.434071 -0.088215
16 -0.227946  0.047462  0.373573 -0.111675
17  1.627912  0.043611  1.743403 -0.012714
19  0.104425  0.037412  0.450598 -0.923387

df.loc[:, 'NewCol'] = 0

df
           A         B         C         D  NewCol
0  -0.761269  0.477348  1.170614  0.752714       0
1   1.217250 -0.930860 -0.769324 -0.408642       0
2  -0.619679 -1.227659 -0.259135  1.700294       0
4  -0.529529  0.000571  0.913779  1.395894       0
6   0.757178  0.240012 -0.553820  1.177202       0
7  -0.986128 -1.313843  0.788589 -0.707836       0
9  -0.692013  0.671866  1.179466 -1.180351       0
11 -0.143273 -0.503199 -1.328728  0.610552       0
12 -0.923110 -1.365890 -1.366202 -1.185999       0
13 -2.026832  0.273593 -0.440426 -0.627423       0
14 -0.054503 -0.788866 -0.228088 -0.404783       0
15  0.955298 -1.430019  1.434071 -0.088215       0
16 -0.227946  0.047462  0.373573 -0.111675       0
17  1.627912  0.043611  1.743403 -0.012714       0
19  0.104425  0.037412  0.450598 -0.923387       0
 7
Author: K88,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-12 11:22:03

Si la columna que está tratando de agregar es una variable de serie, entonces simplemente:

df["new_columns_name"]=series_variable_name #this will do it for you

Esto funciona bien incluso si está reemplazando una columna existente.simplemente escriba el new_columns_name igual que la columna que desea replace.It simplemente sobrescribirá los datos de columna existentes con los datos de la nueva serie.

 7
Author: Akshay Singhvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-03 10:44:11

Permítanme añadir que, al igual que para hum3, .loc no resolví el SettingWithCopyWarning y tuve que recurrir a df.insert(). En mi caso, el falso positivo fue generado por la indexación de cadena" fake " dict['a']['e'], donde 'e' es la nueva columna, y dict['a'] es un DataFrame que proviene del diccionario.

También tenga en cuenta que si sabe lo que está haciendo, puede cambiar de la advertencia utilizando pd.options.mode.chained_assignment = None y que utilizar una de las otras soluciones dadas aquí.

 6
Author: kkumer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:36

Si el objeto data frame y Series tienen el mismo índice, pandas.concat también funciona aquí:

import pandas as pd
df
#          a            b           c           d
#0  0.671399     0.101208   -0.181532    0.241273
#1  0.446172    -0.243316    0.051767    1.577318
#2  0.614758     0.075793   -0.451460   -0.012493

e = pd.Series([-0.335485, -1.166658, -0.385571])    
e
#0   -0.335485
#1   -1.166658
#2   -0.385571
#dtype: float64

# here we need to give the series object a name which converts to the new  column name 
# in the result
df = pd.concat([df, e.rename("e")], axis=1)
df

#          a            b           c           d           e
#0  0.671399     0.101208   -0.181532    0.241273   -0.335485
#1  0.446172    -0.243316    0.051767    1.577318   -1.166658
#2  0.614758     0.075793   -0.451460   -0.012493   -0.385571

En caso de que no tengan el mismo índice:

e.index = df.index
df = pd.concat([df, e.rename("e")], axis=1)
 6
Author: Psidom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 01:46:08
  1. Primero cree una list_of_e de python que tenga datos relevantes.
  2. Use esto: df ['e'] = list_of_e
 6
Author: Sumit Pokhrel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-22 11:54:49

Antes de asignar una nueva columna, si tiene datos indexados, debe ordenar el índice. Al menos en mi caso tuve que:

data.set_index(['index_column'], inplace=True)
"if index is unsorted, assignment of a new column will fail"        
data.sort_index(inplace = True)
data.loc['index_value1', 'column_y'] = np.random.randn(data.loc['index_value1', 'column_x'].shape[0])
 5
Author: Dima Lituiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-16 20:27:15

Una cosa a tener en cuenta, sin embargo, es que si lo haces

df1['e'] = Series(np.random.randn(sLength), index=df1.index)

Esto será efectivamente un left join en el df1.Indice. Así que si quieres tener un efecto de unión exterior , mi solución probablemente imperfecta es crear un dataframe con valores de índice que cubran el universo de tus datos, y luego usar el código anterior. Por ejemplo,

data = pd.DataFrame(index=all_possible_values)
df1['e'] = Series(np.random.randn(sLength), index=df1.index)
 5
Author: WillZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 13:05:50

Para agregar una nueva columna, 'e', al marco de datos existente

 df1.loc[:,'e'] = Series(np.random.randn(sLength))
 4
Author: Chirag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-04 21:50:29

Estaba buscando una forma general de agregar una columna de numpy.nan s a un dataframe sin obtener el tonto SettingWithCopyWarning.

De lo siguiente:

  • las respuestas aquí
  • esta pregunta sobre pasar una variable como argumento de palabra clave
  • este método para generar una numpy matriz de NaNs en línea

Se me ocurrió esto:

col = 'column_name'
df = df.assign(**{col:numpy.full(len(df), numpy.nan)})
 4
Author: ryanjdillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

Por el bien de la integridad - otra solución utilizando DataFrame.eval () método:

Datos:

In [44]: e
Out[44]:
0    1.225506
1   -1.033944
2   -0.498953
3   -0.373332
4    0.615030
5   -0.622436
dtype: float64

In [45]: df1
Out[45]:
          a         b         c         d
0 -0.634222 -0.103264  0.745069  0.801288
4  0.782387 -0.090279  0.757662 -0.602408
5 -0.117456  2.124496  1.057301  0.765466
7  0.767532  0.104304 -0.586850  1.051297
8 -0.103272  0.958334  1.163092  1.182315
9 -0.616254  0.296678 -0.112027  0.679112

Solución:

In [46]: df1.eval("e = @e.values", inplace=True)

In [47]: df1
Out[47]:
          a         b         c         d         e
0 -0.634222 -0.103264  0.745069  0.801288  1.225506
4  0.782387 -0.090279  0.757662 -0.602408 -1.033944
5 -0.117456  2.124496  1.057301  0.765466 -0.498953
7  0.767532  0.104304 -0.586850  1.051297 -0.373332
8 -0.103272  0.958334  1.163092  1.182315  0.615030
9 -0.616254  0.296678 -0.112027  0.679112 -0.622436
 4
Author: MaxU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-14 21:49:44

Lo siguiente es lo que hice... Pero soy bastante nuevo en pandas y realmente Python en general, así que no prometo nada.

df = pd.DataFrame([[1, 2], [3, 4], [5,6]], columns=list('AB'))

newCol = [3,5,7]
newName = 'C'

values = np.insert(df.values,df.shape[1],newCol,axis=1)
header = df.columns.values.tolist()
header.append(newName)

df = pd.DataFrame(values,columns=header)
 3
Author: Devin Charles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 13:07:47

Si obtiene el SettingWithCopyWarning, una solución fácil es copiar el DataFrame al que está tratando de agregar una columna.

df = df.copy()
df['col_name'] = values
 3
Author: fredcallaway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 04:00:33

Formas más fáciles: -

Data ['new_col'] = list_of_values

Datos.loc [:, 'new_col'] = list_of_values

 1
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-08 05:17:14