مثال على ذلك:
>>> df
RP/Rsum P.value
ID
A_23_P42353 17.8 0
A_23_P369994 15.91 0
A_33_P3262440 436.7 0.0005
A_32_P199429 18.97 0
A_23_P256724 22.24 0
A_33_P3394689 24.24 0
A_33_P3403117 27.14 0
A_24_P252364 28.56 0
A_23_P99515 31.82 0
A_24_P261750 31.46 0
>>> df.dtypes
RP/Rsum float64
P.value float64
>>> ids = pandas.Series(['51513', '9201', np.nan, np.nan, '8794', '6530', '7025', '4897', '84935', '11081'])
>>> df["test"] = ids
>>> df
RP/Rsum P.value test
ID
A_23_P42353 17.8 0 NaN
A_23_P369994 15.91 0 NaN
A_33_P3262440 436.7 0.0005 NaN
A_32_P199429 18.97 0 NaN
A_23_P256724 22.24 0 NaN
A_33_P3394689 24.24 0 NaN
A_33_P3403117 27.14 0 NaN
A_24_P252364 28.56 0 NaN
A_23_P99515 31.82 0 NaN
A_24_P261750 31.46 0 NaN
>>> df.dtypes
RP/Rsum float64
P.value float64
test object
يحدث هذا أيضًا مع الكائنات الطافية وما شابه. لست متأكدا ما هو الزناد.
أتساءل عما إذا كان الأمر متعلقًا بهذه المشكلة التي وجدتها أيضًا هذا الصباح:
>>> df = pandas.DataFrame(index=[1,2,3,4])
>>> df["test"] = pandas.Series(["B", "fdf", "344", np.nan])
>>> df["test2"] = ["B", "fdf", "344", np.nan]
>>> df test test2
1 fdf B
2 344 fdf
3 NaN 344
4 NaN nan
يبدو أنه نوع من الخطأ الفردي بالنسبة لي.
يؤدي المزيد من البحث إلى استدعاء Series.reindex
عند تعيين العناصر على أنها الجاني:
>>> data
0 B
1 fdf
2 344
3 NaN
>>> df.index = ["A", "B", "C", "D"]
>>> data.reindex(df.index).values
array([nan, nan, nan, nan], dtype=object)
يؤدي المزيد من البحث إلى reindex
في سمة الفهرس التي يتم استدعاؤها والتي تعطي نتيجة غريبة:
>>> data.index.reindex(df.index)
(Index([A, B, C, D], dtype=object), array([-1, -1, -1, -1], dtype=int32))
ثم تُترجم هذه -1 إلى NaNs.
تم تحديث عنوان الخطأ مع المزيد من الوصف الصحيح.
يتم إعطاء السلسلة مؤشرًا ضمنيًا 0 ، ... ، N-1 عندما لا تقدم واحدًا - لذلك هذا هو بالضبط السلوك الذي أتوقعه. إذا كان data
عبارة عن مصفوفة ndarray أولية أو قائمة ، فلن يحدث هذا. إذن حقيقة أنه عندما تفعل:
df[col] = series
وتتوافق السلسلة تمامًا مع الفهرس df
، هذه ميزة وليست خطأ :) لذا
df['test'] = ids.values
ستعمل بشكل جيد في مثالك
في هذه الحالة ربما يجب توثيقه في مكان ما إذا لم يكن كذلك بالفعل. في غضون ذلك ، سأقوم بتعديل الكود الخاص بي كما اقترحت ، شكرًا.
http://pandas.sourceforge.net/dsintro.html#column -selection-add-deletion
When inserting a Series that does not have the same index as the DataFrame, it will be conformed to the DataFrame’s index:
In [180]: df['one_trunc'] = df['one'][:2]
In [181]: df
Out[181]:
one flag foo one_trunc
a 1 False bar 1
b 2 False bar 2
c 3 True bar NaN
d NaN False bar NaN
You can insert raw ndarrays but their length must match the length of the DataFrame’s index.
ما هي الفكرة وراء حقيقة أنه عند إدراج سلسلة ليس لها نفس الفهرس مثل DataFrame ، فسوف تتوافق مع فهرس DataFrame؟
عند إنشاء DataFrame من سلسلة ، يغطي الفهرس الناتج جميع فهارس السلاسل الفردية. فلماذا لم يتم استخدام هذه الفكرة عند df ['new_column'] = series؟
لذا تحاول إضافة البيانات ، ولكن تتجاهل كل القيم التي لا تتطابق مع فهرس DataFrame؟
إذا كان _index extension_ موجودًا ، فيمكن للمرء دائمًا أن يفعل df ['new_column'] = series.reindex (df.index) عندما لا يرغب المرء في تمديد الفهرس (السلوك الحالي)؟
In [256]: df = pandas.DataFrame({'A': pandas.Series(['foo', 'bar'], index=['a', 'b']),
.....: 'B': pandas.Series([10, 20], index=['b', 'c'])})
In [257]: df
Out[257]:
A B
a foo NaN
b bar 10.000
c NaN 20.000
In [258]: df['C'] = pandas.Series(range(3), index=['a', 'c', 'd'])
In [259]: df
Out[259]:
A B C
a foo NaN 0.000
b bar 10.000 NaN
c NaN 20.000 1.000
في المثال أعلاه ، أتوقع وجود صف 'd' في DataFrame.
حسنًا ، أعتقد أن الفكرة الأساسية هي أن DataFrame عبارة عن "حاوية سلسلة شبيهة بطول ثابت". عندما تقوم بإنشاء DataFrame بإملاء من السلسلة بدون فهرس صريح ، فلا يوجد فهرس واضح بخلاف اتحادهم جميعًا.
أستطيع أن أرى حجة تمديد المؤشر ضمنيًا ، ولكن هناك مقايضات في كلتا الحالتين
التعليق الأكثر فائدة
يتم إعطاء السلسلة مؤشرًا ضمنيًا 0 ، ... ، N-1 عندما لا تقدم واحدًا - لذلك هذا هو بالضبط السلوك الذي أتوقعه. إذا كان
data
عبارة عن مصفوفة ndarray أولية أو قائمة ، فلن يحدث هذا. إذن حقيقة أنه عندما تفعل:df[col] = series
وتتوافق السلسلة تمامًا مع الفهرس
df
، هذه ميزة وليست خطأ :) لذاdf['test'] = ids.values
ستعمل بشكل جيد في مثالك