RJPython
RJPython

Reputation: 43

Change every CSV file value

I'm sure there's a simple solution to this but I'm struggling. I want to set the values of a csv file I've created to 1s and 0s so that I can work out the probability based on each row.

Here's the csv data:

              0      1       2      3         4        5          6       7   \
0      Reference  China  Greece  Japan  S Africa  S Korea  Sri lanka  Taiwan   
1              1      1       1      1         1        1          1       1   
2              1      1       1      1         1        1          1       1   
3              1      1       1      1         1        1          1       1   
4              1      1       1      1         1        1          1       1   
...          ...    ...     ...    ...       ...      ...        ...     ...   
14898          1      1       1      1         1        1          1       1   
14899          1      1       1      1         1        1          1       1   
14900          1      1       1      1         1        1          1       1   
14901          1      1       1      1         1        1          1       1   
14902          1      1       1      1         1        1          1       1   

          8        9      10     11     12      13        14      15        16  
0        USA  Ecuador  Egypt  Ghana  India  Isreal  Pakistan  Taiwan  USA Ohio  
1      1.031        1      1      1      1       1         1       1         1  
2      1.031        1      1      1      1       1         1       1         1  
3      1.031        1      1      1      1       1         1       1         1  
4      1.031        1      1      1      1       1         1       1         1  
...      ...      ...    ...    ...    ...     ...       ...     ...       ...  
14898      1        1      1      1      1       1         1       1         1  
14899      1        1      1      1      1       1         1       1         1  
14900      1        1      1      1      1       1         1       1         1  
14901      1        1      1      1      1       1         1       1         1  
14902      1        1      1      1      1       1         1       1         1  

[14903 rows x 17 columns]

And I've tried this:

data = pd.DataFrame(pd.read_csv('IEratios.csv', header=None,  sep=','))

for x in data:
    if x == 1:
        x = 0
    else:
        x = 1

Which I thought would be simple and work but I was wrong and everywhere I look nothing I find seems to apply to all columns and rows, so I am lost.

Upvotes: 0

Views: 59

Answers (3)

Navaneet
Navaneet

Reputation: 41

You can use the .map() function in pandas, this allows you to run a function trough an entire DF column like so:

def changeNumber(x):
    if x == 1:
        return 0
    else:
        return 1

df = pd.read_csv('IEratios.csv',  sep=',')
df['China'] = df['china'].map(changeNumber)

Upvotes: 1

v0rtex20k
v0rtex20k

Reputation: 1121

Have you tried using the numpy.where function?

data = pd.DataFrame(pd.read_csv('IEratios.csv', header=None,  sep=','))
data = np.where((data == 1), 0, 1)

Upvotes: 0

Luis
Luis

Reputation: 133

I don't know if I understand what you want to do.

Do you want to replace the values that are one by zero, and the zeros by one?

If I understand correctly, how are you using panda you can use the following statement

df.replace({"0": "1", "1": "0"}, inplace=True)

You have to be careful with the data type of your dataframe

Upvotes: 0

Related Questions