Nil*_*age 288 python scalar dataframe pandas
这可能是一个简单的问题,但我无法弄清楚如何做到这一点.可以说我有两个变量如下.
a = 2
b = 3
Run Code Online (Sandbox Code Playgroud)
我想从这构造一个DataFrame:
df2 = pd.DataFrame({'A':a,'B':b})
Run Code Online (Sandbox Code Playgroud)
这会产生错误:
ValueError:如果使用所有标量值,则必须传递索引
我也尝试了这个:
df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()
Run Code Online (Sandbox Code Playgroud)
这给出了相同的错误消息.
DSM*_*DSM 445
错误消息说如果您传递标量值,则必须传递索引.因此,您可以不为列使用标量值 - 例如使用列表:
>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
A B
0 2 3
Run Code Online (Sandbox Code Playgroud)
或使用标量值并传递索引:
>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
A B
0 2 3
Run Code Online (Sandbox Code Playgroud)
fAX*_*fAX 53
pd.DataFrame.from_records
当你手头有字典时,你也可以使用哪个更方便:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }])
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以通过以下方式设置索引:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')
Run Code Online (Sandbox Code Playgroud)
MLg*_*guy 44
你需要先创建一个熊猫系列.第二步是将pandas系列转换为pandas数据帧.
import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()
Run Code Online (Sandbox Code Playgroud)
您甚至可以提供列名称.
pd.Series(data).to_frame('ColumnName')
Run Code Online (Sandbox Code Playgroud)
New*_*ie 23
您可以尝试将字典包装到列表中
my_dict = {'A':1,'B':2}
pd.DataFrame([my_dict])
A B
0 1 2
Run Code Online (Sandbox Code Playgroud)
小智 11
我对 numpy 数组有同样的问题,解决方案是将它们展平:
data = {
'b': array1.flatten(),
'a': array2.flatten(),
}
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
fir*_*ynx 11
熊猫魔法在起作用。所有的逻辑都出来了。
错误消息"ValueError: If using all scalar values, you must pass an index"
说您必须传递索引。
这并不一定意味着传递索引会使熊猫做你想做的事
当您传递索引时,pandas 会将您的字典键视为列名,并将值视为该列应为索引中的每个值包含的内容。
a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])
A B
1 2 3
Run Code Online (Sandbox Code Playgroud)
传递更大的索引:
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
Run Code Online (Sandbox Code Playgroud)
当没有给出索引时,索引通常由数据帧自动生成。然而,大熊猫不知道多少行2
和3
你想要的。但是,您可以更明确地说明它
df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2
A B
0 2 3
1 2 3
2 2 3
3 2 3
Run Code Online (Sandbox Code Playgroud)
不过,默认索引是基于 0 的。
我建议在创建数据框时始终将列表字典传递给数据框构造函数。其他开发人员更容易阅读。Pandas 有很多注意事项,不要让其他开发人员必须精通所有这些知识才能阅读您的代码。
CN_*_*age 10
要找出“ValueError”,需要了解 DataFrame 和“标量值”。要从dict
创建 Dataframe ,至少需要一个数组。
IMO,数组本身是有索引的。
因此,如果存在类似数组的值,则无需指定索引。
例如['a', 's', 'd', 'f']中每个元素的索引分别为0,1,2,3。
df_array_like = pd.DataFrame({
'col' : 10086,
'col_2' : True,
'col_3' : "'at least one array'",
'col_4' : ['one array is arbitrary length', 'multi arrays should be the same length']})
print("df_array_like: \n", df_array_like)
Run Code Online (Sandbox Code Playgroud)
输出:
df_array_like:
col col_2 col_3 col_4
0 10086 True 'at least one array' one array is arbitrary length
1 10086 True 'at least one array' multi arrays should be the same length
Run Code Online (Sandbox Code Playgroud)
从输出中可以看出,DataFrame的索引是0和1。
与数组的索引一致['一个数组是任意长度','多个数组应该是相同的长度']
如果注释掉'col_4',它会引发
ValueError(“如果使用所有标量值,则必须传递索引”)
原因标量值(整数、布尔值和字符串)没有索引
请注意,必须使用某种集合来调用 Index(...)
因为用于定位 DataFrame
索引的所有行的索引应该是一个数组。例如
df_scalar_value = pd.DataFrame({
'col' : 10086,
'col_2' : True,
'col_3' : "'at least one array'"
}, index = ['fst_row','snd_row','third_row'])
print("df_scalar_value: \n", df_scalar_value)
Run Code Online (Sandbox Code Playgroud)
输出:
df_scalar_value:
col col_2 col_3
fst_row 10086 True 'at least one array'
snd_row 10086 True 'at least one array'
third_row 10086 True 'at least one array'
Run Code Online (Sandbox Code Playgroud)
我是初学者,正在学习 python 和英语。
import pandas as pd
a=2
b=3
dict = {'A': a, 'B': b}
pd.DataFrame(pd.Series(dict)).T
# *T :transforms the dataframe*
Result:
A B
0 2 3
Run Code Online (Sandbox Code Playgroud)
您需要提供iterables作为Pandas DataFrame列的值:
df2 = pd.DataFrame({'A':[a],'B':[b]})
Run Code Online (Sandbox Code Playgroud)
小智 8
你可以试试:
df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')
Run Code Online (Sandbox Code Playgroud)
来自'orient'参数的文档:如果传递的dict的键应该是结果DataFrame的列,则传递'columns'(默认)。否则,如果键应该是行,则传递“索引”。
小智 6
也许Series会提供你需要的所有功能:
pd.Series({'A':a,'B':b})
Run Code Online (Sandbox Code Playgroud)
DataFrame可以被认为是系列的集合,因此您可以:
如果数据是字典,构造数据帧的一种方法是调用pd.json_normalize()
它构造平面数据帧(索引是在幕后创建的)。它的主要用例是展平嵌套字典,但也适用于平面字典。
df = pd.json_normalize({'A': 2, 'B': 3})
A B
0 2 3
Run Code Online (Sandbox Code Playgroud)
一般来说,可以通过首先初始化一个空数据帧然后用字典填充它来构造一个数据帧。
对于宽数据框:
d = {'A': 2, 'B': 3}
df = pd.DataFrame(columns=d.keys())
df.loc[0] = d
A B
0 2 3
Run Code Online (Sandbox Code Playgroud)
对于长数据框:
df = pd.DataFrame()
df['col'] = {'A': 2, 'B': 3}
col
A 2
B 3
Run Code Online (Sandbox Code Playgroud)
如果数据是一些标量值(如OP中所示),则将其包装在列表/元组中并传递给数据帧构造函数(并可选择传递列/索引标签)。嵌套列表构造一个宽数据帧,平面列表构造一个长数据帧。
a = 2
b = 3
df1 = pd.DataFrame([[a, b]], columns=['A', 'B'])
A B
0 2 3
df2 = pd.DataFrame([a, b], columns=['A'])
A
0 2
1 3
Run Code Online (Sandbox Code Playgroud)
输入不一定是记录列表 - 它也可以是单个字典:
pd.DataFrame.from_records({'a':1,'b':2}, index=[0])
a b
0 1 2
Run Code Online (Sandbox Code Playgroud)
这似乎相当于:
pd.DataFrame({'a':1,'b':2}, index=[0])
a b
0 1 2
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以试试这个:
df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')
Run Code Online (Sandbox Code Playgroud)
小智 5
我通常使用以下命令从 dicts 快速创建一个小表。
假设您有一个字典,其中键是文件名,值是它们对应的文件大小,您可以使用以下代码将其放入 DataFrame(注意 .items() 对 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
Run Code Online (Sandbox Code Playgroud)
小智 5
我尝试了 transpose() 并且它有效。\n缺点:您创建了一个新对象。
\ntestdict1 = {'key1':'val1','key2':'val2','key3':'val3','key4':'val4'}\n\ndf = pd.DataFrame.from_dict(data=testdict1,orient='index')\nprint(df)\nprint(f'ID for DataFrame before Transpose: {id(df)}\\n')\n\ndf = df.transpose()\nprint(df)\nprint(f'ID for DataFrame after Transpose: {id(df)}')\n
Run Code Online (Sandbox Code Playgroud)\n输出
\n 0\nkey1 val1\nkey2 val2\nkey3 val3\nkey4 val4\nID for DataFrame before Transpose: 1932797100424\n\n key1 key2 key3 key4\n0 val1 val2 val3 val4\nID for DataFrame after Transpose: 1932797125448\n\n\xe2\x80\x8b```\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
307352 次 |
最近记录: |