मैं python2.7 और पांडा 0.11.0 का उपयोग कर रहा हूं।पांडा: कुछ numpy arrays के साथ एक कॉलम भरें
मैं DataFrame.apply (func) का उपयोग कर डेटाफ्रेम के कॉलम को भरने का प्रयास करता हूं। Func() फ़ंक्शन एक numpy सरणी (1x3) वापस करने के लिए माना जाता है।
import pandas as pd
import numpy as np
df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
print(df)
A B C
0 0.910142 0.788300 0.114164
1 -0.603282 -0.625895 2.843130
2 1.823752 -0.091736 -0.107781
3 0.447743 -0.163605 0.514052
परीक्षण उद्देश्य के लिए इस्तेमाल समारोह:
def test(row):
# some complex calc here
# based on the values from different columns
return np.array((1,2,3))
df['D'] = df.apply(test, axis=1)
[...]
ValueError: Wrong number of items passed 1, indices imply 3
हास्यास्पद है कि जब मैं खरोंच से dataframe बनाने के लिए, यह बहुत अच्छी तरह से काम करता है, और रिटर्न की उम्मीद है:
dic = {'A': {0: 0.9, 1: -0.6, 2: 1.8, 3: 0.4},
'C': {0: 0.1, 1: 2.8, 2: -0.1, 3: 0.5},
'B': {0: 0.7, 1: -0.6, 2: -0.1, 3: -0.1},
'D': {0:np.array((1,2,3)),
1:np.array((1,2,3)),
2:np.array((1,2,3)),
3:np.array((1,2,3))}}
df= pd.DataFrame(dic)
print(df)
A B C D
0 0.9 0.7 0.1 [1, 2, 3]
1 -0.6 -0.6 2.8 [1, 2, 3]
2 1.8 -0.1 -0.1 [1, 2, 3]
3 0.4 -0.1 0.5 [1, 2, 3]
अग्रिम धन्यवाद
आप 'list's /' 'DataFrame's या में tuple's का उपयोग कर से बचना चाहिए' सीरीज '। क्यों न केवल 'कॉलम' में 3 कॉलम हैं या आपके कॉलम के साथ एक अलग 'डेटाफ्रेम' क्यों नहीं है? –
मुझे लगता है कि कभी-कभी वेक्टर फॉर्म कुछ मात्रा के लिए अधिक प्राकृतिक होता है, उदाहरण के लिए, निर्देशांक। 'df.endPoint-df.startPoint' स्पष्ट रूप से' np.c_ [df.endX-df.startX, df.endY-df.startY, df.endZ-df.startZ] 'के लिए अधिक बेहतर है। – herrlich10