Python 可以使用字符串访问numpy数组吗?
我有一张这样的桌子: 我希望在python中像这样访问它Python 可以使用字符串访问numpy数组吗?,python,arrays,numpy,Python,Arrays,Numpy,我有一张这样的桌子: 我希望在python中像这样访问它 table["Water"]["Rice"] = 3 numpy.ndarray是否可以这样做?假设您创建的源numpy数组为: arr = np.array([[1, 3, 1], [2, 5, 3], [5, 6, 7]]) 但是“普通”Numpy数组没有“符号”索引(名称)。 它们只有整数索引,从0开始的每个维度 您可以在N
table["Water"]["Rice"] = 3
numpy.ndarray是否可以这样做?假设您创建的源numpy数组为:
arr = np.array([[1, 3, 1],
[2, 5, 3],
[5, 6, 7]])
但是“普通”Numpy数组没有“符号”索引(名称)。
它们只有整数索引,从0开始的每个维度
您可以在Numpy中定义所谓的结构化数组,但它们
仅允许在一行中使用符号名称。
这样的数组由行(由整数索引索引)和
每行都是命名字段的集合。
但是您需要行和列的符号名,所以Numpy
结构化阵列不是您的选择
在我看来,唯一合理的选择是使用pandasonic
DataFrames,其中列和行都可以有符号名
大熊猫:
- 索引是每行的“名称”集合
- 列实际上也是一个索引,但它保持不变 列的名称
# Names of columns and rows (the same)
names = ['Water', 'Rice', 'Sauce']
# Actual creation of a DataFrame
table = pd.DataFrame(arr, index=names, columns=names)
其内容是:
Water Rice Sauce
Water 1 3 1
Rice 2 5 3
Sauce 5 6 7
要从该数据帧读取元素,您可以使用您的代码,即:
table['Water']['Rice']
在上述代码中:
- 水(第一个索引)是一个列名
- Rice(第二个索引)是行索引(名称)
table.loc['Water', 'Rice']
但这次:
- 水(第一个索引)是一个行索引
- Rice(第二个索引)是一个列名
table.loc['Water', 'Rice'] = 12
现在,当您打印(表格)时,结果是:
Water Rice Sauce
Water 1 12 1
Rice 2 5 3
Sauce 5 6 7
如果您在此数据帧(表)上执行一些操作,但您希望
要将其与其他代码集成,需要使用Numpy数组
(不是数据帧),可以通过以下方式传递:
table.values
i、 e.传递基础Numpy数组
但是,您可以仅使用
整数索引。假设您将源Numpy数组创建为:
arr = np.array([[1, 3, 1],
[2, 5, 3],
[5, 6, 7]])
但是“普通”Numpy数组没有“符号”索引(名称)。
它们只有整数索引,从0开始的每个维度
您可以在Numpy中定义所谓的结构化数组,但它们
仅允许在一行中使用符号名称。
这样的数组由行(由整数索引索引)和
每行都是命名字段的集合。
但是您需要行和列的符号名,所以Numpy
结构化阵列不是您的选择
在我看来,唯一合理的选择是使用pandasonic
DataFrames,其中列和行都可以有符号名
大熊猫:
- 索引是每行的“名称”集合
- 列实际上也是一个索引,但它保持不变 列的名称
# Names of columns and rows (the same)
names = ['Water', 'Rice', 'Sauce']
# Actual creation of a DataFrame
table = pd.DataFrame(arr, index=names, columns=names)
其内容是:
Water Rice Sauce
Water 1 3 1
Rice 2 5 3
Sauce 5 6 7
要从该数据帧读取元素,您可以使用您的代码,即:
table['Water']['Rice']
在上述代码中:
- 水(第一个索引)是一个列名
- Rice(第二个索引)是行索引(名称)
table.loc['Water', 'Rice']
但这次:
- 水(第一个索引)是一个行索引
- Rice(第二个索引)是一个列名
table.loc['Water', 'Rice'] = 12
现在,当您打印(表格)时,结果是:
Water Rice Sauce
Water 1 12 1
Rice 2 5 3
Sauce 5 6 7
如果您在此数据帧(表)上执行一些操作,但您希望
要将其与其他代码集成,需要使用Numpy数组
(不是数据帧),可以通过以下方式传递:
table.values
i、 e.传递基础Numpy数组
但是,您可以仅使用
整数指数。你所说的
表是什么意思?Python中没有这样的对象类(或者numpy
),它基本上是一个字典。数组有索引,字典有键。索引只能是整数,键可以是任何类型。它们是两种不同的数据结构。简短的回答是不。你可能想试试熊猫。。。无论如何,这不是一个明确的问题,请尝试以更具体的方式添加输入…您所说的表
是什么意思?Python中没有这样的对象类(或者numpy
),它基本上是一个字典。数组有索引,字典有键。索引只能是整数,键可以是任何类型。它们是两种不同的数据结构。简短的回答是不。你可能想试试熊猫。。。无论如何,这不是一个明确的问题,请尝试以更具体的方式添加输入…谢谢您的回答。我遇到了Numpy的结构化数组。但是我不太明白。谢谢你的解释。熊猫看起来很有趣。我现在用另一种方法解决了它。我创建了自己的类“my_array”,它基本上是一个numpy.ndarray。我重写了“getitem”和“setitem”以在字典中查找给定的字符串(string->int),并使用此int在ndarray中获取/保存值并返回它。我可以随心所欲地使用这个类。但我不确定这是否是一个性能方面的好解决方案。你觉得呢?大家都知道Numpy的运行速度比熊猫快,这对大型阵列尤其重要。您可以比较两个版本的执行时间,例如使用%timeit。也许你的解决方案会更快?试试看,谢谢你的回答。我遇到了Numpy的结构化数组。但是我不太明白。谢谢你的解释。熊猫看起来很有趣。我现在用另一种方法解决了它。我创建了自己的类“my_array”,它基本上是一个numpy.ndarray。我重写了“getitem”和“setitem”以在字典中查找给定的字符串(string->int),并使用此int获取/保存t