我有一个课程,为游戏中的玩家提供服务,创建他们和其他东西.
我需要将这些播放器对象保存在文件中以便以后使用.我尝试了pickle模块,但我不知道如何保存多个对象并再次加载它们?有没有办法做到这一点,或者我应该使用其他类,如列表,并保存和加载我的对象列表?
有没有更好的办法?
如何获取DataFrame的名称并将其作为字符串打印?
例:
boston (分配给csv文件的var名称)
boston = read_csv('boston.csv')
print ('The winner is team A based on the %s table.) % boston
Run Code Online (Sandbox Code Playgroud) 我记得在MatLab的日子里使用结构化数组,你可以将不同的数据存储为主结构的属性.就像是:
a = {}
a.A = magic(10)
a.B = magic(50); etc.
Run Code Online (Sandbox Code Playgroud)
其中aA和aB彼此完全分开,允许您在a中存储不同的类型并根据需要对它们进行操作.熊猫允许我们做类似的事情,但不完全相同.
我正在使用Pandas并希望存储数据帧的属性而不实际将其放在数据帧中.这可以通过以下方式完成:
import pandas as pd
a = pd.DataFrame(data=pd.np.random.randint(0,100,(10,5)),columns=list('ABCED')
# now store an attribute of <a>
a.local_tz = 'US/Eastern'
Run Code Online (Sandbox Code Playgroud)
现在,本地时区存储在a中,但是当我保存数据帧时我无法保存此属性(即重新加载后没有a.local_tz).有没有办法保存这些属性?
目前,我只是在数据框中创建新列来保存时区,纬度,长期等信息,但这似乎有点浪费.此外,当我对数据进行分析时遇到了必须排除这些其他列的问题.
################## BEGIN EDIT ##################
使用unutbu的建议,我现在以h5格式存储数据.如上所述,将元数据作为数据帧的属性重新加载是有风险的.但是,由于我是这些文件(和处理算法)的创建者,我可以选择存储为元数据的内容和不存储的内容.在处理将进入h5文件的数据时,我选择将元数据存储在初始化为类的属性的字典中.我创建了一个简单的IO类来导入h5数据,并将元数据作为类属性.现在我可以处理我的数据帧而不会丢失元数据.
class IO():
def __init__(self):
self.dtfrmt = 'dummy_str'
def h5load(self,filename,update=False):
'''h5load loads the stored HDF5 file. Both the dataframe (actual data) and
the associated metadata are stored in the H5file
NOTE: This does not load "any" H5
file, it loads H5 files specifically created …Run Code Online (Sandbox Code Playgroud) Q1:将元信息保存到数据帧的最佳实践是什么?我知道以下编码实践
import pandas as pd
df = pd.DataFrame([])
df.currency = 'USD'
df.measure = 'Price'
df.frequency = 'daily'
Run Code Online (Sandbox Code Playgroud)
但正如这篇文章将元信息/元数据添加到 Pandas DataFrame 中所述,这与通过应用诸如“groupby、pivot、join 或 loc”等函数而丢失信息的风险相关联,因为它们可能会返回“一个没有元数据的新 DataFrame随附的”。
这仍然有效还是在此期间对元信息处理进行了更新?为此目的对熊猫进行子类化是一种很好的编码习惯吗?
Q2:什么是替代编码实践?
我不认为构建一个单独的对象是非常合适的。使用 Multiindex 也不能说服我。假设我想将带有价格的数据框除以带有收益的数据框。使用 Multiindices 将非常复杂。
#define price DataFrame
p_index = pd.MultiIndex.from_tuples([['Apple', 'price', 'daily'],['MSFT', 'price', 'daily']])
price = pd.DataFrame([[90, 20], [85, 30], [70, 25]], columns=p_index)
# define earnings dataframe
e_index = pd.MultiIndex.from_tuples(
[['Apple', 'earnings', 'daily'], ['MSFT', 'earnings', 'daily']])
earnings=pd.DataFrame([[5000, 2000], [5800, 2200], [5100, 3000]],
columns=e_index)
price.divide(earnings.values, level=1, axis=0)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我什至不确保公司指数真的匹配。我可能需要调用 pd.DataFrame.reindex() 或类似的。在我看来,这不是一个好的编码实践。 …
为什么不能通过副本传递实例的属性?我想将该name属性传递给另一个数据帧.
import copy
df = pd.DataFrame([1,2,3])
df.name = 'sheet1'
df2 = copy.deepcopy(df)
print(f'df.name: {df.name}')
>> df.name: sheet1
print(f'df2.name: {df2.name}')
>> AttributeError
...
'DataFrame' object has no attribute 'name'
Run Code Online (Sandbox Code Playgroud)
同样,在创建类并从中继承时,为什么这也不起作用?
class DfWithName(pd.DataFrame):
def __init__(self, *args, **kwargs):
self.__init__ = super().__init__(*args, **kwargs)
print('lol')
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
Run Code Online (Sandbox Code Playgroud)
并使用相同的代码:
import copy
df = DfWithName([1,2,3])
df.name = 'sheet1'
df2 = copy.deepcopy(df)
print(f'df.name: {df2.name}')
>> AttributeError
...
'DataFrame' object has no attribute 'name'
Run Code Online (Sandbox Code Playgroud) 我是java新手,我正在尝试创建一个XML文档并一遍又一遍地克隆该文档的特定节点(减去textnode).有人回答我并说我应该继承节点并覆盖克隆.所以我的问题是什么是子类?
Pandas有一个很好的界面,便于在HDF5中存储Dataframes和Series等内容:
random_matrix = np.random.random_integers(0,10, m_size)
my_dataframe = pd.DataFrame(random_matrix)
store = pd.HDFStore('some_file.h5',complevel=9, complib='bzip2')
store['my_dataframe'] = my_dataframe
store.close()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在同一个文件中保存一些其他常规Python对象,它会抱怨:
my_dictionary = dict()
my_dictionary['a'] = 2 # <--- ERROR
my_dictionary['b'] = [2,3,4]
store['my_dictionary'] = my_dictionary
store.close()
Run Code Online (Sandbox Code Playgroud)
同
TypeError: cannot properly create the storer for: [_TYPE_MAP] [group->/par
ameters (Group) u'',value-><type 'dict'>,table->None,append->False,kwargs-
>{}]
Run Code Online (Sandbox Code Playgroud)
如何在我存储其他Pandas对象的同一HDF5中存储常规Python数据结构?
我是熊猫的新手,来自统计学背景,我在一个概念性的问题上苦苦挣扎:熊猫有包含值的列。但是有时值具有特殊含义-在像SPSS或R这样的统计程序中,称为“标签”。
想象一下,列“ rain”具有两个值0“ no rain”和1“ raining”-是否可以将这些标签分配给列?
熊猫也有办法吗?主要用于电镀和可视化目的。
我终于弄清楚了如何从DataFrame中使用_metadata,一切正常,除了我无法持久保存它,例如hdf5或json。我知道它是可行的,因为我复制了框架,而_metadata属性则复制了“ non _metadata”属性,但没有。
例
df = pandas.DataFrame #make up a frame to your liking
pandas.DataFrame._metadata = ["testmeta"]
df.testmeta = "testmetaval"
df.badmeta = "badmetaval"
newframe = df.copy()
newframe.testmeta -->outputs "testmetaval"
newframe.badmeta ---> raises attribute error
#json test
df.to_json(Path)
revivedjsonframe = pandas.io.json.read_json(Path)
revivedjsonframe.testmeta ---->raises Attribute Error
#hdf5 test
revivedhdf5frame.testmeta ---> returns None
Run Code Online (Sandbox Code Playgroud)
这个人/sf/answers/1800100361/说对他有用,但是我是这个网站(和熊猫)的新手,无法发布到该主题或直接问他。