কলামগুলির জন্য একটি ফর্ম্যাট স্ট্রিং ব্যবহার করে ফ্লোটগুলির পান্ডাস ডেটা ফ্রেম কীভাবে প্রদর্শিত করবেন?


165

আমি একটি প্রদত্ত ফর্ম্যাট print()এবং আইপিথন ব্যবহার করে একটি পান্ডাস ডেটা ফ্রেম প্রদর্শন করতে চাই display()। উদাহরণ স্বরূপ:

df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
                  index=['foo','bar','baz','quux'],
                  columns=['cost'])
print df

         cost
foo   123.4567
bar   234.5678
baz   345.6789
quux  456.7890

আমি একরকম এটি মুদ্রণ জোর করতে চাই

         cost
foo   $123.46
bar   $234.57
baz   $345.68
quux  $456.79

ডেটা নিজেই সংশোধন না করে বা একটি অনুলিপি তৈরি না করে, এটি প্রদর্শিত হওয়ার উপায়টি পরিবর্তন করুন।

কিভাবে আমি এটি করতে পারব?


2
হয় costশুধুমাত্র কলাম ভাসা, অথবা অন্য ভাসা কলাম যে সঙ্গে ফরম্যাট করা উচিত নয় হয় $?
unutbu

আমি এটি ব্যয় কলামের জন্যই করতে চাই (আমার আসল
জেসন এস

আমি বুঝতে পারি যে একবার $ সংযুক্ত হওয়ার পরে ডেটা টাইপ স্বয়ংক্রিয়ভাবে বস্তুতে পরিবর্তিত হয়।
Nguai আল

উত্তর:


284
import pandas as pd
pd.options.display.float_format = '${:,.2f}'.format
df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
                  index=['foo','bar','baz','quux'],
                  columns=['cost'])
print(df)

উৎপাদনের

        cost
foo  $123.46
bar  $234.57
baz  $345.68
quux $456.79

তবে এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনি প্রতি ফ্লোট ডলারের চিহ্ন দিয়ে ফর্ম্যাট করতে চান ।

অন্যথায়, আপনি যদি কিছু ফ্লোটের জন্য ডলার বিন্যাস করতে চান তবে আমি মনে করি আপনাকে ডেটা ফ্রেমের প্রাক-সংশোধন করতে হবে (সেই ফ্লোটগুলি স্ট্রিংয়ে রূপান্তর করতে হবে):

import pandas as pd
df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
                  index=['foo','bar','baz','quux'],
                  columns=['cost'])
df['foo'] = df['cost']
df['cost'] = df['cost'].map('${:,.2f}'.format)
print(df)

উৎপাদনের

         cost       foo
foo   $123.46  123.4567
bar   $234.57  234.5678
baz   $345.68  345.6789
quux  $456.79  456.7890

3
এই সমাধানটি পান্ডাস 0.22 হিসাবে এখনও আমার জন্য সঠিকভাবে কাজ করে।
টেলর এডমিস্টন

19
যেমন যেমন এখানে দেখানো হয়েছে , আপনি কেবলমাত্র একটি প্রদত্ত ব্লকের জন্য বিকল্পগুলি পরিবর্তন করতে পারেনwith pd.option_context('display.float_format', '${:,.2f}'.format'):
আন্দ্রে হল্জনার

1
'@ আন্ড্রেহলজনার এর মন্তব্যে সমাপনী বন্ধনীর আগে অতিরিক্ত ; অন্যথায়, এটি একটি কবজ মত কাজ করে!
dTanMan

67

আপনি যদি ডেটাফ্রেমটি সংশোধন করতে না চান তবে আপনি এই কলামটির জন্য একটি কাস্টম বিন্যাস ব্যবহার করতে পারেন।

import pandas as pd
pd.options.display.float_format = '${:,.2f}'.format
df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
                  index=['foo','bar','baz','quux'],
                  columns=['cost'])


print df.to_string(formatters={'cost':'${:,.2f}'.format})

উৎপাদনের

        cost
foo  $123.46
bar  $234.57
baz  $345.68
quux $456.79

2
মাল্টিলেভাল কলামে ফর্ম্যাটরটি পাওয়া কি সম্ভব?
ব্যবহারকারী 2579685

3
আফিক্স, এই উদাহরণটি দ্বিতীয় লাইনটি ছাড়া কাজ করেpd.options.display.float_format = '${:,.2f}'.format
পিয়ানোজেমস

56

পান্ডাস 0.17 হিসাবে এখন একটি স্টাইলিং সিস্টেম রয়েছে যা মূলত পাইথন ফর্ম্যাট স্ট্রিংগুলি ব্যবহার করে ডেটা ফ্রেমের বিন্যাসিত ভিউ সরবরাহ করে :

import pandas as pd
import numpy as np

constants = pd.DataFrame([('pi',np.pi),('e',np.e)],
                   columns=['name','value'])
C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'})
C

যা প্রদর্শন করে

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

এটি একটি ভিউ অবজেক্ট; ডেটা ফ্রেম নিজেই বিন্যাস পরিবর্তন করে না, তবে ডেটা ফ্রেমের আপডেটগুলি ভিউতে প্রতিফলিত হয়:

constants.name = ['pie','eek']
C

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

তবে এটির কিছু সীমাবদ্ধতা রয়েছে বলে মনে হয়:

  • জায়গায় নতুন সারি এবং / বা কলামগুলি যুক্ত করা স্টাইলযুক্ত দৃশ্যে (সারি / কলাম লেবেল যুক্ত করে না) অসঙ্গতি সৃষ্টি করে বলে মনে হচ্ছে:

    constants.loc[2] = dict(name='bogus', value=123.456)
    constants['comment'] = ['fee','fie','fo']
    constants

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

যা দেখতে ঠিক আছে তবে:

C

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

  • ফর্ম্যাটিং কেবল মানগুলির জন্য কাজ করে, সূচী প্রবেশের জন্য নয়:

    constants = pd.DataFrame([('pi',np.pi),('e',np.e)],
                   columns=['name','value'])
    constants.set_index('name',inplace=True)
    C = constants.style.format({'name': '~~ {} ~~', 'value':'--> {:15.10f} <--'})
    C

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


2
আমি কি দোভাষীর ভিতরে থেকে ডেটা ফ্রেম.স্টাইলটি ব্যবহার করতে পারি?
জেএমএস

23

উপরের আনটবুর মতো, আপনি applymapনিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

import pandas as pd
df = pd.DataFrame([123.4567, 234.5678, 345.6789, 456.7890],
                  index=['foo','bar','baz','quux'],
                  columns=['cost'])

df = df.applymap("${0:.2f}".format)

df.to_csv()আমার .csvফাইলের সমস্ত কলামগুলির একই "অঙ্কের প্রস্থ" রয়েছে কিনা তা নিশ্চিত করার জন্য কল করার আগে আমি এই পদ্ধতিটি ব্যবহার করতে চাই । ধন্যবাদ!
জেস্কওয়ার

5

পাইথন ফর্ম্যাট () সহ আমি পান্ডাস.প্লাই () ব্যবহার করতে পছন্দ করি।

import pandas as pd
s = pd.Series([1.357, 1.489, 2.333333])

make_float = lambda x: "${:,.2f}".format(x)
s.apply(make_float)

এছাড়াও, এটি একাধিক কলাম সহ সহজেই ব্যবহার করা যেতে পারে ...

df = pd.concat([s, s * 2], axis=1)

make_floats = lambda row: "${:,.2f}, ${:,.3f}".format(row[0], row[1])
df.apply(make_floats, axis=1)

2

আপনি নিজের অঞ্চলে লোকাল সেট করতে এবং একটি মুদ্রার ফর্ম্যাট ব্যবহার করতে ফ্লোট_ফর্ম্যাট সেট করতে পারেন। এটি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে মুদ্রার জন্য $ চিহ্ন সেট করবে।

import locale

locale.setlocale(locale.LC_ALL, "en_US.UTF-8")

pd.set_option("float_format", locale.currency)

df = pd.DataFrame(
    [123.4567, 234.5678, 345.6789, 456.7890],
    index=["foo", "bar", "baz", "quux"],
    columns=["cost"],
)
print(df)

        cost
foo  $123.46
bar  $234.57
baz  $345.68
quux $456.79

0

সারসংক্ষেপ:


    df = pd.DataFrame({'money': [100.456, 200.789], 'share': ['100,000', '200,000']})
    print(df)
    print(df.to_string(formatters={'money': '${:,.2f}'.format}))
    for col_name in ('share',):
        df[col_name] = df[col_name].map(lambda p: int(p.replace(',', '')))
    print(df)
    """
        money    share
    0  100.456  100,000
    1  200.789  200,000

        money    share
    0 $100.46  100,000
    1 $200.79  200,000

         money   share
    0  100.456  100000
    1  200.789  200000
    """
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.