পাইথন পান্ডাস সমষ্টি ফলাফল থেকে বৈজ্ঞানিক স্বরলিপি ফর্ম্যাট / দমন করুন


162

কীভাবে একজন খুব বড় সংখ্যার জন্য বৈজ্ঞানিক স্বরলিপি উত্পন্ন করে পান্ডাসের গোষ্ঠীভিত্তিক ক্রিয়াকলাপ থেকে আউটপুটটির বিন্যাসটি পরিবর্তন করতে পারেন?

আমি জানি পাই কীভাবে পাইথনে স্ট্রিং ফর্ম্যাটিং করা যায় তবে এটি এখানে প্রয়োগ করার সময় আমি ক্ষতিতে আছি।

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

এটি বৈজ্ঞানিক স্বরলিপি দমন করে যদি আমি স্ট্রিংয়ে রূপান্তর করি তবে এখন আমি কীভাবে স্ট্রিং ফর্ম্যাট করব এবং দশমিকগুলি যুক্ত করব তা ভাবছি।

sum_sales_dept.astype(str)


3
আমি এই প্রশ্নটি দেখেছি কিন্তু আমি নিশ্চিত না যে এটি কীভাবে আমাকে সহায়তা করে। আমি কেবলমাত্র বর্তমান টাইপটি সংরক্ষণ করতে চাই যা ভাসমান এবং বৈজ্ঞানিক স্বরলিপি পরিবর্তে ফলাফলটিতে সমস্ত দশমিক দেখায়।
horatio1701d

এটি সম্ভবত একটি প্রদর্শন জিনিস। তবে আপনি যদি ভাবেন যে আপনার সমস্যা সম্পর্কে বিশেষ কিছু রয়েছে যা আপনাকে ড্যানের লিঙ্কের থেকে আলাদা করে তোলে তবে আপনার সমস্যা সম্পর্কে আরও তথ্য পোস্ট করা দরকার, বিশেষত একটি ছোট্ট ডেটাসেট যা সমস্যাটি পুনরুত্পাদন করে। এছাড়াও dtypesআপনার ফলাফল কি?
টমআগস্পারগার

উত্তর:


237

মঞ্জুর, মন্তব্যে আমি যে উত্তরটি যুক্ত করেছি তা খুব সহায়ক নয়। আপনি নিজের স্ট্রিং কনভার্টারের মতো নির্দিষ্ট করতে পারেন।

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)

In [28]: Series(np.random.randn(3))*1000000000
Out[28]: 
0    -757322420.605
1   -1436160588.997
2   -1235116117.064
dtype: float64

আমি এটি নিশ্চিত না যে এটি করা পছন্দসই উপায়, তবে এটি কার্যকর।

খালি নান্দনিক উদ্দেশ্যে স্ট্রিংগুলিতে সংখ্যাগুলি রূপান্তর করা একটি খারাপ ধারণা বলে মনে হচ্ছে তবে আপনার যদি ভাল কারণ থাকে তবে এটি একটি উপায়:

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]: 
0     0.026
1    -0.482
2    -0.694
dtype: object

1
ধন্যবাদ ড্যান আপনি কীভাবে পান্ডাস বিকল্পগুলি পুনরায় সেট করবেন জানেন?
জোশ

1
@ জোশ পান্ডাসগুলিতে অস্থায়ীভাবে বিকল্পগুলি সেট করতে, আপনি ব্যবহার করতে পারেন pandas.option_context( পান্ডাস.পিডিটা.আর । / প্যানডাস-ডকস / স্টেবল / জেনারেটেড/… )।
মাইলারমার্কাস

এটি প্রায়শই নান্দনিক উদ্দেশ্যে নয়, তবে বৃহত সংখ্যক ডেটাফ্রেমে ভিজ্যুয়াল কর্টেক্সের মাধ্যমে তথ্যের দ্রুত স্কিমিংয়ের জন্য।
ম্যাটানস্টার

pd.set_option ('display.float_format', lambda x: '% .3f'% x) আমার পক্ষেও কাজ করেছে
চালিত_স্পাইডার

5
এটি কাজ করে এবং আপনি নতুন এফ স্ট্রিং স্বরলিপিটিও ব্যবহার করতে পারেন। ভালো লেগেছে pd.set_option('display.float_format', lambda x: f'{x:,.3f}')আপনি পাশাপাশি এক হাজার বিভাজক চাই।
576i

87

ড্যান অ্যালান এর উত্তরের মতো ল্যাম্বডা ফাংশন ছাড়াই এটি করার আরও একটি উপায় এখানে দেওয়া হয়েছে :

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

অথবা

>>> pd.set_option('display.float_format', '{:.2f}'.format)

1
আমি মনে করি যে ফাইমেট স্ট্রিংটি টিম সদস্যদের কাছে পাইথনের সাথে কম পরিচিত, তাদের কাছে আরও সহজলভ্য হবে এবং ল্যাম্বডা ফাংশনগুলি বুঝতে পারে না।
স্টিভেন সি হাওয়েল

23

নির্দিষ্ট ডাটাফ্রেমের জন্য বৈজ্ঞানিক স্বরলিপি দমন করতে আপনি রাউন্ড ফাংশনটি ব্যবহার করতে পারেন:

df1.round(4)

অথবা আপনি দমন করতে পারেন বিশ্বব্যাপী এটি দ্বারা:

pd.options.display.float_format = '{:.4f}'.format

11

আপনি যদি কোনও বৃহত্তর নোটবুক কক্ষে কোনও ডাটা ফ্রেমের আউটপুট স্টাইল করতে চান তবে আপনি প্রতি-ডেটা ফ্রেমের ভিত্তিতে প্রদর্শন শৈলীটি সেট করতে পারেন:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

এখানে চিত্র বর্ণনা লিখুন

ডকুমেন্টেশন এখানে দেখুন


0

আপনি যদি মানগুলি ব্যবহার করতে চান তবে csvfile csv.writer এর অংশ হিসাবে বলুন, তালিকা তৈরির আগে সংখ্যাগুলি বিন্যাস করা যেতে পারে:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.