Dodawanie nowej kolumny do istniejącego DataFrame w Pythonie
Mam następujący indeksowany DataFrame z nazwanymi kolumnami i wierszami nie-ciągłymi liczbami:
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
Chciałbym dodać nową kolumnę 'e'
do istniejącej ramki danych i nie chcę niczego zmieniać w ramce danych (tzn. nowa kolumna zawsze ma taką samą długość jak ramka danych).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
Próbowałem różnych wersji join
, append
, merge
, ale nie dostałem pożądanego rezultatu, tylko co najwyżej błędy. Jak Mogę dodać kolumnę e
do powyższego przykładu? 21 answers
Użyj oryginalnych indeksów df1, aby utworzyć serię:
df1['e'] = Series(np.random.randn(sLength), index=df1.index)
Edit 2015
Niektórzy zgłosili się, aby uzyskać SettingWithCopyWarning
z tym kodem.
Jednak kod nadal działa idealnie z aktualną wersją pandy 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'
SettingWithCopyWarning
ma na celu poinformowanie o ewentualnym nieprawidłowym przypisaniu na kopii ramki danych. Nie koniecznie mówi, że zrobiłeś to źle (może wywołać fałszywe alarmy), ale od 0.13.0 daje Ci znać, że są bardziej odpowiednie metody dla ten sam cel. Następnie, jeśli otrzymasz ostrzeżenie, po prostu postępuj zgodnie z jego radą: spróbuj użyć .loc[row_index, col_indexer] = wartość zamiast
>>> 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
>>>
W rzeczywistości, jest to obecnie bardziej efektywna metoda, jak opisane w pandy docs
Edit 2017
Jak wskazano w komentarzach i przez @ Alexander, obecnie najlepszą metodą dodawania wartości serii jako nowej kolumny ramki danych może być użycie assign
:
df1 = df1.assign(e=p.Series(np.random.randn(sLength)).values)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-07 12:07:59
Jest to prosty sposób na dodanie nowej kolumny: df['e'] = e
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-10 06:53:58
Chciałbym dodać nową kolumnę, 'e', do istniejącej ramki danych i nie zmieniać niczego w ramce danych. (Seria zawsze miała taką samą długość jak ramka danych.)
Zakładam, że wartości indeksu w e
odpowiadają wartościom w df1
.
Najprostszy sposób zainicjowania nowej kolumny o nazwie e
i przypisania jej wartości z serii e
:
df['e'] = e.values
Assign (Pandy 0.16.0+)
Od Pandas 0.16.0, można również użyć assign
, która przypisuje nowe kolumny do ramki danych i zwraca nowy obiekt (kopię) ze wszystkimi oryginalnymi kolumnami oprócz nowych.
df1 = df1.assign(e=e.values)
Zgodnie z ten przykład (który zawiera również kod źródłowy funkcji assign
), Możesz również dołączyć więcej niż jedną kolumnę:
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
W kontekście twojego przykładu:
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
Opis tej nowej funkcji, gdy została po raz pierwszy wprowadzona, można znaleźć tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:32
Robienie tego bezpośrednio przez NumPy będzie najbardziej efektywne:
df1['e'] = np.random.randn(sLength)
Uwaga moja oryginalna (bardzo stara) sugestia polegała na użyciu map
(co jest znacznie wolniejsze):
df1['e'] = df1['a'].map(lambda x: np.random.random())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 13:05:01
Wydaje się, że w ostatnich wersjach pand sposobem na przejście jest użycie df.przypisanie :
df1 = df1.assign(e=np.random.randn(sLength))
Nie produkuje SettingWithCopyWarning
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 07:39:25
Super proste przypisanie kolumny
Ramka danych pandy jest zaimplementowana jako uporządkowany dict kolumn.Oznacza to, że __getitem__
[]
może być używany nie tylko do uzyskania określonej kolumny, ale __setitem__
[] =
Może być użyty do przypisania nowej kolumny.
[]
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
Zauważ, że to działa nawet jeśli indeks ramki danych jest wyłączony.
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
[]= is the way to go, ale uważaj!
Jeśli jednak masz pd.Series
i spróbujesz przypisać go do ramki danych, w której indeksy są wyłączone, będziesz miał kłopoty. Zobacz przykład:
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
Dzieje się tak dlatego, że pd.Series
domyślnie ma indeks wyliczany od 0 do N. i metoda pandas [] =
próbuje być "mądrym"
Co właściwie się dzieje.
Podczas korzystania z metody [] =
pandy Po cichu wykonuje zewnętrzne połączenie lub zewnętrzne połączenie używając indeksu lewej ramka danych ręki i indeks serii prawej ręki. df['column'] = series
Side note
To szybko powoduje dysonans poznawczy, ponieważ metoda []=
próbuje zrobić wiele różnych rzeczy w zależności od wejścia, A wyniku nie można przewidzieć, chyba że po prostu wiesz {56]} Jak działają pandy. Ja bym więc odradzał []=
w bazach kodu, ale podczas eksploracji danych w notatniku jest dobrze.
Obejście problemu
Jeśli masz pd.Series
i chcesz, aby był przypisany od góry do dołu, lub jeśli kodujesz kod produktywny i nie jesteś pewien kolejności indeksów, warto zabezpieczyć się przed tego rodzaju problemem.
Możesz obniżyć pd.Series
do np.ndarray
lub list
, to wystarczy.
df['protected'] = pd.Series(['no', 'no', 'no', 'yes']).values
Lub
df['protected'] = list(pd.Series(['no', 'no', 'no', 'yes']))
Nie jest to jednak zbyt jednoznaczne.
Jakiś programista może przyjść i powiedzieć "Hej, to wygląda na zbędne, po prostu zoptymalizuję to".
Explicit sposób
Ustawienie indeksu pd.Series
jako indeksu {[28] } jest jednoznaczne.
df['protected'] = pd.Series(['no', 'no', 'no', 'yes'], index=df.index)
Lub bardziej realistycznie, prawdopodobnie masz pd.Series
już dostępne.
protected_series = pd.Series(['no', 'no', 'no', 'yes'])
protected_series.index = df.index
3 no
2 no
1 no
0 yes
Można teraz przypisać
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
Alternatywny sposób z df.reset_index()
Ponieważ dysonans indeksu jest problemem, jeśli uważasz, że indeks ramki danych powinien nie dyktować rzeczy, możesz po prostu upuścić Indeks, to powinno być szybciej, ale nie jest zbyt czyste, ponieważ twoja funkcja teraz prawdopodobnie robi dwie rzeczy.
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
Uwaga na df.assign
Chociaż df.assign
wyjaśnij to, co robisz, w rzeczywistości ma wszystkie te same problemy, co powyżej []=
{41]}
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
Po prostu uważaj z {[31] } że Twoja kolumna nie nazywa się self
. Spowoduje to błędy. To sprawia, że df.assign
śmierdzący , ponieważ są tego rodzaju artefakty w funkcji.
df.assign(self=pd.Series(['no', 'no', 'no', 'yes'])
TypeError: assign() got multiple values for keyword argument 'self'
Możesz powiedzieć, "Cóż, po prostu nie użyję self
wtedy". Ale kto wie, jak ta funkcja zmienia się w przyszłości, aby wspierać nowe argumenty. Być może Twoja nazwa kolumny będzie argumentem w nowej aktualizacji pand, powodując problemy z aktualizacją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-03 08:59:22
Jeśli chcesz ustawić całą nową kolumnę na początkową wartość bazową( np. None
), możesz to zrobić: df1['e'] = None
To faktycznie przypisałoby Typ" object " do komórki. Później możesz dowolnie umieszczać złożone typy danych, takie jak lista, w poszczególnych komórkach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 20:51:00
Dostałem przerażony SettingWithCopyWarning
, i nie został naprawiony za pomocą składni iloc. Mój DataFrame został stworzony przez read_sql ze źródła ODBC. Korzystając z sugestii lowtech powyżej, następujące zadziałało dla mnie:
df.insert(len(df.columns), 'e', pd.Series(np.random.randn(sLength), index=df.index))
To działało dobrze, aby wstawić kolumnę na końcu. Nie wiem, czy jest najskuteczniejszy, ale nie lubię komunikatów ostrzegawczych. Myślę, że jest lepsze rozwiązanie, ale nie mogę go znaleźć i myślę, że zależy to od jakiegoś aspektu indeksu.
Uwaga . Że to działa tylko raz i wyświetli komunikat o błędzie, jeśli próbuje zastąpić istniejącą kolumnę.
Uwaga jak wyżej i od 0.16.0 przypisanie jest najlepszym rozwiązaniem. Zobacz dokumentację http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.assign.html#pandas.DataFrame.assign
Działa dobrze dla typu przepływu danych, w którym nie nadpisuje się wartości pośrednich.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 11:32:43
Niezawodny:
df.loc[:, 'NewCol'] = 'New_Val'
Przykład:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 11:22:03
Jeśli kolumna, którą próbujesz dodać jest zmienną szeregową, to po prostu:
df["new_columns_name"]=series_variable_name #this will do it for you
To działa dobrze, nawet jeśli zastępujesz istniejącą kolumnę.po prostu wpisz new_columns_name tak samo jak Kolumna, którą chcesz replace.It zastąpi istniejące dane kolumn nowymi danymi serii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 10:44:11
Dodam tylko, że tak jak dla hum3, .loc
nie rozwiązałem SettingWithCopyWarning
i musiałem uciekać się do df.insert()
. W moim przypadku false positive zostało wygenerowane przez" fake " indeksowanie łańcucha dict['a']['e']
, Gdzie 'e'
jest nową kolumną, a dict['a']
jest ramką danych pochodzącą ze słownika.
Należy również pamiętać, że jeśli wiesz, co robisz, można przełączyć Ostrzeżenie za pomocą
pd.options.mode.chained_assignment = None
a następnie użyć jednego z innych rozwiązań podanych tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:36
Jeśli ramka danych i obiekt szeregowy mają ten sam indeks, pandas.concat
działa również tutaj:
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
W przypadku, gdy nie mają tego samego indeksu:
e.index = df.index
df = pd.concat([df, e.rename("e")], axis=1)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-07 01:46:08
- najpierw Utwórz list_of_e Pythona, który zawiera odpowiednie dane.
- Użyj tego: df ['e'] = list_of_e
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 11:54:49
Przed przypisaniem nowej kolumny, jeśli masz zindeksowane dane, musisz posortować indeks. Przynajmniej w moim przypadku musiałem:
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])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 20:27:15
Należy jednak pamiętać, że jeśli zrobisz
df1['e'] = Series(np.random.randn(sLength), index=df1.index)
/ Align= "left" / indeks. Więc jeśli chcesz mieć zewnętrzny efekt join, moim prawdopodobnie niedoskonałym rozwiązaniem jest stworzenie ramki danych z wartościami indeksu obejmującymi wszechświat Twoich danych, a następnie użycie powyższego kodu. Na przykład,
data = pd.DataFrame(index=all_possible_values)
df1['e'] = Series(np.random.randn(sLength), index=df1.index)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 13:05:50
Aby dodać nową kolumnę "e" do istniejącej ramki danych
df1.loc[:,'e'] = Series(np.random.randn(sLength))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-04 21:50:29
Szukałem ogólnego sposobu na dodanie kolumny numpy.nan
s do ramki danych bez uzyskania głupiego SettingWithCopyWarning
.
Z następujących:
- odpowiedzi tutaj
- to pytanie o podanie zmiennej jako argumentu słowa kluczowego
-
ta metoda do generowania
numpy
tablicy Nan w linii
Wymyśliłem to:
col = 'column_name'
df = df.assign(**{col:numpy.full(len(df), numpy.nan)})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:42
Ze względu na kompletność-jeszcze jedno rozwiązanie z wykorzystaniem ramki danych .metoda eval () :
Data:
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
Rozwiązanie:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 21:49:44
Oto co zrobiłem... Ale jestem całkiem nowy w pandach i naprawdę Pythonie w ogóle, więc żadnych obietnic.
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 13:07:47
Jeśli otrzymasz SettingWithCopyWarning
, łatwą poprawką jest skopiowanie ramki danych, do której próbujesz dodać kolumnę.
df = df.copy()
df['col_name'] = values
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-07 04:00:33
Najprostsze sposoby:-
Data ['new_col'] = list_of_values
Data.loc [:, 'new_col'] = list_of_values
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-08 05:17:14