N. *_*cA. 55 python r dataframe pandas
在R中,您可以通过使用rbind将一列的列粘贴到另一列的底部来组合两个数据帧.在熊猫中,你如何完成同样的事情?这看起来很奇怪.
使用追加导致一个可怕的混乱,包括NaNs和事情,原因我不明白.我只是试图"rbind"两个相同的框架,看起来像这样:
编辑:我是以一种愚蠢的方式创建DataFrames,这导致了问题.将= rbind追加到所有意图和目的.见下面的答案.
0 1 2 3 4 5 6 7
0 ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42
1 ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42
2 AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43
3 AMEC.L 20130220 1030.0 1040.00 1024.0000 1035.0000 1972517 2013-02-20 18:47:43
4 AAL.L 20130220 1998.0 2014.50 1942.4999 1951.0000 3666033 2013-02-20 18:47:44
5 ANTO.L 20130220 1093.0 1097.00 1064.7899 1068.0000 2183931 2013-02-20 18:47:44
6 ARM.L 20130220 941.5 965.10 939.4250 951.5001 2994652 2013-02-20 18:47:45
Run Code Online (Sandbox Code Playgroud)
但是我得到了一些可怕的东西:
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
0 NaN NaN NaN NaN NaN NaN NaN NaN ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42
1 NaN NaN NaN NaN NaN NaN NaN NaN ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42
2 NaN NaN NaN NaN NaN NaN NaN NaN AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43
3 NaN NaN NaN NaN NaN NaN NaN NaN AMEC.L 20130220 1030.0 1040.00 1024.0000 1035.0000 1972517 2013-02-20 18:47:43
4 NaN NaN NaN NaN NaN NaN NaN NaN AAL.L 20130220 1998.0 2014.50 1942.4999 1951.0000 3666033 2013-02-20 18:47:44
5 NaN NaN NaN NaN NaN NaN NaN NaN ANTO.L 20130220 1093.0 1097.00 1064.7899 1068.0000 2183931 2013-02-20 18:47:44
6 NaN NaN NaN NaN NaN NaN NaN NaN ARM.L 20130220 941.5 965.10 939.4250 951.5001 2994652 2013-02-20 18:47:45
0 NaN NaN NaN NaN NaN NaN NaN NaN ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42
1 NaN NaN NaN NaN NaN NaN NaN NaN ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42
2 NaN NaN NaN NaN NaN NaN NaN NaN AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43
3 NaN NaN NaN NaN NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.我开始想念R :(
N. *_*cA. 35
啊,这与我如何创建DataFrame有关,而不是我如何组合它们.如果你使用循环和一个如下所示的语句创建一个框架,那么它的长和短是:
Frame = Frame.append(pandas.DataFrame(data = SomeNewLineOfData))
Run Code Online (Sandbox Code Playgroud)
您必须忽略该索引
Frame = Frame.append(pandas.DataFrame(data = SomeNewLineOfData), ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
或者,在组合数据时您将遇到问题.
abu*_*dis 21
这对我有用:
import numpy as np
import pandas as pd
dates = np.asarray(pd.date_range('1/1/2000', periods=8))
df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
df2 = df1.copy()
df = df1.append(df2)
Run Code Online (Sandbox Code Playgroud)
产量:
A B C D
2000-01-01 -0.327208 0.552500 0.862529 0.493109
2000-01-02 1.039844 -2.141089 -0.781609 1.307600
2000-01-03 -0.462831 0.066505 -1.698346 1.123174
2000-01-04 -0.321971 -0.544599 -0.486099 -0.283791
2000-01-05 0.693749 0.544329 -1.606851 0.527733
2000-01-06 -2.461177 -0.339378 -0.236275 0.155569
2000-01-07 -0.597156 0.904511 0.369865 0.862504
2000-01-08 -0.958300 -0.583621 -2.068273 0.539434
2000-01-01 -0.327208 0.552500 0.862529 0.493109
2000-01-02 1.039844 -2.141089 -0.781609 1.307600
2000-01-03 -0.462831 0.066505 -1.698346 1.123174
2000-01-04 -0.321971 -0.544599 -0.486099 -0.283791
2000-01-05 0.693749 0.544329 -1.606851 0.527733
2000-01-06 -2.461177 -0.339378 -0.236275 0.155569
2000-01-07 -0.597156 0.904511 0.369865 0.862504
2000-01-08 -0.958300 -0.583621 -2.068273 0.539434
Run Code Online (Sandbox Code Playgroud)
如果您还没有使用pandas我的最新版本,强烈建议升级.现在可以使用包含重复索引的DataFrame进行操作.
B.M*_*.W. 16
import pandas as pd
df1 = pd.DataFrame({'col1': [1,2], 'col2':[3,4]})
df2 = pd.DataFrame({'col1': [5,6], 'col2':[7,8]})
print(df1)
print(df2)
print(pd.concat([df1, df2]))
Run Code Online (Sandbox Code Playgroud)
结果如下:
col1 col2
0 1 3
1 2 4
col1 col2
0 5 7
1 6 8
col1 col2
0 1 3
1 2 4
0 5 7
1 6 8
Run Code Online (Sandbox Code Playgroud)
如果你仔细阅读文档,它也会解释其他操作,如cbind,.. iec.
是的, R 中的rbind()(行绑定数据帧)和cbind()(列绑定数据帧)非常简单直观。
您可以使用 pandas 库中的“concat()”函数来实现相同的目的。pandas 中的等效内容rbind(df1,df2)如下:
pd.concat([df1, df2], ignore_index = True)
Run Code Online (Sandbox Code Playgroud)
不过,为了便于使用,我在下面使用 pandas 编写了 rbind() 和 cbind() 函数。
def rbind(df1, df2):
import pandas as pd
return pd.concat([df1, df2], ignore_index = True)
def cbind(df1, df2):
import pandas as pd
# Note this does not keep the original indexes of the df's and resets them to 0,1,...
return pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis = 1)
Run Code Online (Sandbox Code Playgroud)
如果复制、粘贴并运行上述函数,您可以在 python 中使用这些函数,就像在 R 中使用它们一样。此外,它们与 R 对应函数具有相同的假设,例如 rbind(df1, df2): df1和 df2 需要具有相同的列名。
下面是该函数的示例rbind():
import pandas as pd
dict1 = {'Name': ['Ali', 'Craig', 'Shaz', 'Maheen'], 'Age': [36, 38, 33, 34]}
dict2 = {'Name': ['Fahad', 'Tyler', 'Thai-Son', 'Shazmeen', 'Uruj', 'Tatyana'], 'Age': [42, 27, 29, 60, 42, 31]}
data1 = pd.DataFrame(dict1)
data2 = pd.DataFrame(dict2)
# We now row-bind the two dataframes and save it as df_final.
df_final = rbind(data1, data2)
print(df_final)
Run Code Online (Sandbox Code Playgroud)
这是我创建的一个开放的公共 GitHub 存储库文件,用于在一个中心位置编写和整合 Python 等效 R 函数: https://github.com/CubeStatistica/Learning-Data-Science-Properly-for-Work-and-Production-Using -Python/blob/main/Writing-R-Functions-in-Python.ipynb
请随意贡献。
快乐编码!