Dit is misschien een simpele vraag, maar ik weet niet hoe ik dit moet doen. Laten we zeggen dat ik als volgt twee variabelen heb.
a = 2
b = 3
Ik wil hier een DataFrame van maken:
df2 = pd.DataFrame({'A':a,'B':b})
Dit genereert een fout:
ValueError: als u alle scalaire waarden gebruikt, moet u een index doorgeven
Ik heb dit ook geprobeerd:
df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()
Dit geeft dezelfde foutmelding.
Antwoord 1, autoriteit 100%
De foutmelding zegt dat als je scalaire waarden doorgeeft, je een index moet doorgeven. U kunt dus ofwel geen scalaire waarden voor de kolommen gebruiken — b.v. gebruik een lijst:
>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
A B
0 2 3
of gebruik scalaire waarden en geef een index door:
>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
A B
0 2 3
Antwoord 2, autoriteit 11%
Je kunt ook pd.DataFrame.from_records
gebruiken, wat handiger is als je het woordenboek al bij de hand hebt:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }])
U kunt desgewenst ook de index instellen door:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')
Antwoord 3, autoriteit 9%
Je moet eerst een reeks panda’s maken. De tweede stap is het converteren van de panda-serie naar een panda-dataframe.
import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()
Je kunt zelfs een kolomnaam opgeven.
pd.Series(data).to_frame('ColumnName')
Antwoord 4, autoriteit 7%
U kunt proberen uw woordenboek in een lijst te plaatsen
my_dict = {'A':1,'B':2}
pd.DataFrame([my_dict])
A B
0 1 2
Antwoord 5, autoriteit 2%
Misschien biedt Series alle functies die je nodig hebt:
pd.Series({'A':a,'B':b})
DataFrame kan worden gezien als een verzameling van series, dus u kunt:
-
Voeg meerdere series samen tot één dataframe (zoals beschreven hier )
-
Voeg een Series-variabele toe aan een bestaand dataframe ( voorbeeld hier )
Antwoord 6
Ik had hetzelfde probleem met numpy arrays en de oplossing is om ze plat te maken:
data = {
'b': array1.flatten(),
'a': array2.flatten(),
}
df = pd.DataFrame(data)
Antwoord 7
U moet iterables opgeven als de waarden voor de Pandas DataFrame-kolommen:
df2 = pd.DataFrame({'A':[a],'B':[b]})
Antwoord 8
Panda’s magie op het werk. Alle logica is eruit.
De foutmelding "ValueError: If using all scalar values, you must pass an index"
Zegt dat u een index moet doorgeven.
Dit betekent niet noodzakelijk dat het doorgeven van een index ervoor zorgt dat panda’s wat je wilt dat ze doen
Als je een index doorgeeft, behandelen panda’s je woordenboeksleutels als kolomnamen en de waarden als wat de kolom zou moeten bevatten voor elk van de waarden in de index.
a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])
A B
1 2 3
Een grotere index doorgeven:
df2 = pd.DataFrame({'A':a,'B':b}, index=[1, 2, 3, 4])
A B
1 2 3
2 2 3
3 2 3
4 2 3
Een index wordt meestal automatisch gegenereerd door een dataframe als er geen wordt gegeven. Panda’s weten echter niet hoeveel rijen van 2
en 3
je wilt. U kunt er echter explicieter over zijn
df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2
A B
0 2 3
1 2 3
2 2 3
3 2 3
De standaardindex is echter gebaseerd op 0.
Ik raad aan om altijd een woordenboek met lijsten door te geven aan de dataframeconstructor bij het maken van dataframes. Het is gemakkelijker te lezen voor andere ontwikkelaars. Pandas heeft veel kanttekeningen, zorg ervoor dat andere ontwikkelaars niet allemaal experts moeten zijn om je code te kunnen lezen.
Antwoord 9
Je zou kunnen proberen:
df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')
Uit de documentatie over het ‘orient’-argument: Als de sleutels van het doorgegeven dict de kolommen van het resulterende DataFrame moeten zijn, geef dan columns door (standaard). Als de sleutels rijen moeten zijn, geef dan index door.
Antwoord 10
Ik gebruik meestal het volgende om snel een kleine tabel te maken van dictaten.
Stel dat je een dictaat hebt waarin de sleutels bestandsnamen zijn en de waarden hun overeenkomstige bestandsgroottes, je zou de volgende code kunnen gebruiken om het in een DataFrame te plaatsen (let op de .items()-aanroep op het dict):
files = {'A.txt':12, 'B.txt':34, 'C.txt':56, 'D.txt':78}
filesFrame = pd.DataFrame(files.items(), columns=['filename','size'])
print(filesFrame)
filename size
0 A.txt 12
1 B.txt 34
2 C.txt 56
3 D.txt 78
Antwoord 11
Als u van plan bent een woordenboek van scalaire waarden te converteren, moet u een index opnemen:
import pandas as pd
alphabets = {'A': 'a', 'B': 'b'}
index = [0]
alphabets_df = pd.DataFrame(alphabets, index=index)
print(alphabets_df)
Hoewel index niet vereist is voor een woordenboek van lijsten, kan hetzelfde idee worden uitgebreid tot een woordenboek van lijsten:
planets = {'planet': ['earth', 'mars', 'jupiter'], 'length_of_day': ['1', '1.03', '0.414']}
index = [0, 1, 2]
planets_df = pd.DataFrame(planets, index=index)
print(planets_df)
Natuurlijk kun je voor het woordenboek van lijsten het dataframe bouwen zonder een index:
planets_df = pd.DataFrame(planets)
print(planets_df)
Antwoord 12
de invoer hoeft geen lijst met records te zijn – het kan ook een enkel woordenboek zijn:
pd.DataFrame.from_records({'a':1,'b':2}, index=[0])
a b
0 1 2
Wat lijkt op:
pd.DataFrame({'a':1,'b':2}, index=[0])
a b
0 1 2
Antwoord 13
Dit komt omdat een DataFrame twee intuïtieve dimensies heeft: de kolommen en de rijen.
U specificeert alleen de kolommen met behulp van de woordenboektoetsen.
Als u alleen eendimensionale gegevens wilt specificeren, gebruik dan een serie!
Antwoord 14
Een andere optie is om de scalairen on-the-fly om te zetten in een lijst met behulp van Dictionary Comprehension:
df = pd.DataFrame(data={k: [v] for k, v in mydict.items()})
De uitdrukking {…} creëert een nieuw dictaat waarvan de waarden een lijst van 1 element zijn. zoals:
In [20]: mydict
Out[20]: {'a': 1, 'b': 2}
In [21]: mydict2 = { k: [v] for k, v in mydict.items()}
In [22]: mydict2
Out[22]: {'a': [1], 'b': [2]}
Antwoord 15
Woordenboek converteren naar dataframe
col_dict_df = pd.Series(col_dict).to_frame('new_col').reset_index()
Geef nieuwe naam aan kolom
col_dict_df.columns = ['col1', 'col2']
Antwoord 16
Verander uw ‘a’- en ‘b’-waarden als volgt in een lijst:
a = [2]
b = [3]
voer dan dezelfde code als volgt uit:
df2 = pd.DataFrame({'A':a,'B':b})
df2
en je krijgt:
A B
0 2 3
Antwoord 17
eenvoudigste opties ls :
dict = {'A':a,'B':b}
df = pd.DataFrame(dict, index = np.arange(1) )
Antwoord 18
Ik heb transpose() geprobeerd en het werkte.
Nadeel: je maakt een nieuw object aan.
testdict1 = {'key1':'val1','key2':'val2','key3':'val3','key4':'val4'}
df = pd.DataFrame.from_dict(data=testdict1,orient='index')
print(df)
print(f'ID for DataFrame before Transpose: {id(df)}\n')
df = df.transpose()
print(df)
print(f'ID for DataFrame after Transpose: {id(df)}')
Uitvoer
0
key1 val1
key2 val2
key3 val3
key4 val4
ID for DataFrame before Transpose: 1932797100424
key1 key2 key3 key4
0 val1 val2 val3 val4
ID for DataFrame after Transpose: 1932797125448
?```
Antwoord 19
Je zou dit kunnen proberen:
df2 = pd.DataFrame.from_dict({‘a’:a,’b’:b}, orient = ‘index’)
Antwoord 20
Als je een woordenboek hebt, kun je er een panda-dataframe van maken met de volgende regel code:
pd.DataFrame({"key": d.keys(), "value": d.values()})
Antwoord 21
Geef het dictaat gewoon door op een lijst:
a = 2
b = 3
df2 = pd.DataFrame([{'A':a,'B':b}])