Het bouwen van panda’s DataFrame van waarden in variabelen geeft “ValueError: als u alle scalaire waarden gebruikt, moet u een index doorgeven”

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}])

LEAVE A REPLY

Please enter your comment!
Please enter your name here

3 × 2 =

Other episodes