Python 熊猫的性能有着奇怪的差异,小熊猫的数据帧;大规模
我有一个从CSV文件读取的数据帧。我需要生成新数据并将它们添加到旧数据的末尾 但奇怪的是,当比较小规模和大规模时,它显示出完全不同的结果。我想这可能与查看、复制()和链接分配有关 我尝试了两个选项来使用pd.copy()来避免潜在的问题 第一种选择:Python 熊猫的性能有着奇怪的差异,小熊猫的数据帧;大规模,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有一个从CSV文件读取的数据帧。我需要生成新数据并将它们添加到旧数据的末尾 但奇怪的是,当比较小规模和大规模时,它显示出完全不同的结果。我想这可能与查看、复制()和链接分配有关 我尝试了两个选项来使用pd.copy()来避免潜在的问题 第一种选择: d_jlist = pd.read_csv('127case.csv', sep=',') #got the data shape: (46355,48) from CSV file d_jlist2 = d_jlist.copy()
d_jlist = pd.read_csv('127case.csv', sep=',') #got the data shape: (46355,48) from CSV file
d_jlist2 = d_jlist.copy() #Use deep copy, in case of change the raw data
d_jlist3 = pd.DataFrame()
a = np.random.choice(range(5,46350),size = 1000*365) #Select from row 5 to row 46350
for i in a:
d_jlist3 = d_jlist3.append(d_jlist.iloc[i].copy() +np.random.uniform(-1,1) )
d_jlist3 = d_jlist3.replace(0,0.001,regex=True)
d_jlist3 = d_jlist3.round(3)
d_jlist = d_jlist.append(d_jlist3)
a = consumption.columns.values #Something to do with header
a = a[5:53]
d_jlist.to_csv('1127case_1.csv',header = a,index=False)
第二种选择:
d_jlist = pd.read_csv('127case.csv', sep=',')
d_jlist2 = d_jlist.copy()
d_jlist3 = pd.DataFrame()
a = np.random.choice(range(5,46350),size = 1000*365)
for i in a:
d_jlist3 = d_jlist3.append(d_jlist2.iloc[i] +np.random.uniform(-1,1) )
d_jlist3 = d_jlist3.replace(0,0.001,regex=True)
d_jlist3 = d_jlist3.round(3)
d_jlist = d_jlist.append(d_jlist3)
a = consumption.columns.values #Something to do with header
a = a[5:53]
d_jlist.to_csv('1117case_2.csv',header = a,index=False)
问题是,如果我在小范围内使用这些代码,它会按预期工作。新行添加到旧行,旧数据中没有任何更改。
但是,如果我达到上面的比例(1000*365),旧的行将被更改
奇怪的是:每行只有前两列保持不变。每行的其余列都将被更改
结果是:
左边是旧的数据帧,它有(46356,48)形状。下面是生成的新数据
右边的一个是从选项1得到的结果(两个选项得到的结果相同)。从第三列开始,旧数据被更改
如果我以较小的比例(3行)尝试这两个选项中的任何一个,都可以。所有旧数据都将保留。
我怎么能理解呢?我花了很多时间试图找到解释,但失败了
大熊猫的某些规则在规模更大(达到365K)时是否发生了变化
d_jlist = pd.read_csv('127case.csv', sep=',')
d_jlist = d_jlist.iloc[:10] #Only select 10 rows from old ones
d_jlist2 = d_jlist.copy()
d_jlist3 = pd.DataFrame()
a = np.random.choice(range(5,6),size = 3) #Only select 3 rows randomly from old data
for i in a:
d_jlist3 = d_jlist3.append(d_jlist2.iloc[i] +np.random.uniform(-1,1) )
d_jlist3 = d_jlist3.replace(0,0.001,regex=True)
d_jlist3 = d_jlist3.round(3)
d_jlist = d_jlist.append(d_jlist3)
a = consumption.columns.values #Something to do with header
a = a[5:53]
d_jlist.to_csv('1117case_2.csv',header = a,index=False)